您的位置:首页 > 移动开发 > Android开发

Android 四大组件学习之Activity六

2017-07-06 13:52 846 查看
本节学习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);
}

}
第一种情况:

按setbutton,而且按getbutton



当然了,这时候按backbutton,当再次进入后,会发现输入框里没有内容。同一时候按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重现销毁,然后重现再创建。

这时候假设我们不保存须要保存的数据,也会出现不正确的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: