本节学习Activity的状态保存与恢复。
先用例子开始:
布局文件主要是实现如下,大家自行编写
Activity逻辑代码:
public class FiveActivity extends Activity { private Button setButton; private Button getButton; private EditText editText; private float value; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_five); setButton = (Button)findViewById(R.id.button1); getButton = (Button)findViewById(R.id.button2); editText = (EditText)findViewById(R.id.editText1); setButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub value = 1.234f; editText.setText("hello world"); } }); getButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String string = editText.getText().toString(); Toast.makeText(FiveActivity.this, string+" "+value, 0).show(); } }); } @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub Log.i("FiveActivity", "onSaveInstanceState"); super.onSaveInstanceState(outState); } }
第一种情况:
按set按钮,并且按get按钮
当然了,这时候按back按钮,当再次进入后,会发现输入框里没有内容,同时按get得到为0.0
同时第一种情况中我的打印Log.i("FiveActivity", "onSaveInstanceState");始终也是没有打印
接着第二种情况:
当我们set后,再按get后。 这次不按Back键,这次按Home键:
当我们按Home键后,我们的Activity就处于stop状态,这时候我们的打印语句出现了
这时候我们手动杀死FiveActivity
这时候在启动Activity,当再次get时就会发现:
EditText中的文字Hello World依旧存在,而我的Value变量变为0.0了。
总结:
1: 对于第一种情况,Android系统觉得是用户自愿的行为,觉得那就没有保存的必要了。
2: 对于第二种情况,EditText中的文字存在那是因为Android系统中几乎对所以的UI都实现了OnSaveInstanceState方法,这是默认的实现。所以当我们Home出去时就会打印出现,至于我们的变量为啥没有恢复,很明显那是因为没人保存它的值,这就得需要我们程序员自己手动保存。
当我们在OnCreate方法中添加:
if(savedInstanceState != null) value = savedInstanceState.getFloat("1234");
protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub Log.i("FiveActivity", "onSaveInstanceState"); outState.putFloat("1234", value); super.onSaveInstanceState(outState); }
这样的话,当杀死进程后,再次进来我们的数据就会正常的出现。
同时, 除系统资源不足时,或者手机的屏幕方向变化时,改变语言时,都会导致Activity重现销毁,然后重现再创建。这时候如果我们不保存需要保存的数据,也会出现不对的情况。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-25 11:26:55