目的:Activity被系统销毁,重建时能恢复销毁前的状态。
原理:
实验:
说明:1、把下面代码copy到eclipse中,编译烧写到,通过横竖屏切换,可验证原理中的Activity生命周期的流程图。
2、程序通过back返回键退出程序时,不回调onSaveInstanceState。
代码:
public class MainActivity extends Activity {
static final String EDITTEXT = "edittext";
static final String MCOUNT = "mcount";
private Button myButton;
int mCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myButton = (Button) findViewById(R.id.myButton);
myButton.setText(Integer.toString(mCount));
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mCount++;
myButton.setText(Integer.toString(mCount));
}
});
Log.d("zxs", "/------ Activity onCreate ----------/");
}
@Override
protected void onStart() {
super.onStart();
Log.d("zxs", "/------ Activity onStart ----------/");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState != null) {
mCount = (Integer) savedInstanceState.get(MCOUNT);
myButton.setText(Integer.toString(mCount));
Log.d("zxs", "/------ onRestoreInstanceState savedInstanceState != null ----------/");
} else {
Log.d("zxs", "/------ onRestoreInstanceState savedInstanceState == null ----------/");
}
Log.d("zxs", "/------ Activity onRestoreInstanceState ----------/");
}
@Override
protected void onResume() {
super.onResume();
Log.d("zxs", "/------ Activity onResume ----------/");
}
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt(MCOUNT, mCount);
Log.d("zxs", "/------ Activity onSaveInstanceState ----------/");
}
@Override
protected void onStop() {
super.onStop();
Log.d("zxs", "/------ Activity onStop ----------/");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("zxs", "/------ Activity onDestroy ----------/");
}
}
logcat:
01-22 17:00:54.393: D/zxs(28137): /—— Activity onCreate ———-/
01-22 17:00:54.403: D/zxs(28137): /—— Activity onStart ———-/
01-22 17:00:54.403: D/zxs(28137): /—— Activity onResume ———-/
01-22 17:01:05.383: D/zxs(28137): /—— Activity onSaveInstanceState ———-/
01-22 17:01:05.383: D/zxs(28137): /—— Activity onStop ———-/
01-22 17:01:05.383: D/zxs(28137): /—— Activity onDestroy ———-/
01-22 17:01:06.103: D/zxs(28137): /—— Activity onCreate ———-/
01-22 17:01:06.103: D/zxs(28137): /—— Activity onStart ———-/
01-22 17:01:06.103: D/zxs(28137): /—— onRestoreInstanceState savedInstanceState != null ———-/
01-22 17:01:06.103: D/zxs(28137): /—— Activity onRestoreInstanceState ———-/
01-22 17:01:06.103: D/zxs(28137): /—— Activity onResume ———-/
01-22 17:01:15.053: D/zxs(28137): /—— Activity onSaveInstanceState ———-/
01-22 17:01:15.053: D/zxs(28137): /—— Activity onStop ———-/
01-22 17:01:15.053: D/zxs(28137): /—— Activity onDestroy ———-/
01-22 17:01:15.313: D/zxs(28137): /—— Activity onCreate ———-/
01-22 17:01:15.313: D/zxs(28137): /—— Activity onStart ———-/
01-22 17:01:15.313: D/zxs(28137): /—— onRestoreInstanceState savedInstanceState != null ———-/
01-22 17:01:15.313: D/zxs(28137): /—— Activity onRestoreInstanceState ———-/
01-22 17:01:15.313: D/zxs(28137): /—— Activity onResume ———-/
参考:
1:http://my.oschina.net/u/556624/blog/271667:
2:http://developer.android.com/