发现一篇很不错的文章: http://blog.csdn.net/Android_Tutor/article/details/5772285 请戳这里。 不谢!
我主要还是 还是要说说 如何保存当前Activity的状态(主要是一些数据)
设想两种情况:
1、按了home键后,重新进入文本框中的东西会丢下,所以我们要保存当前页面信息,
2、如在写短信的时候接到一个电话,那么当你接电话的时候短信界面就会别隐藏,那么我们希望接完电话后可以继续编辑短信,就需要保存状态。
上面的文章说的是。 在onStop里面保存 当前页面的数据。
其实,Activity的 onSaveInstanceState() 和 onRestoreInstanceState()也可以完成,它们并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。
所以说:通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onStop()适合用于数据的持久化保存。
步骤为:
(1)在离开页面的时候用onSaveInstanceState中的outState可以保存你所需要的值,
(2)在重新回到该页面的时候可以使用onRestoreInstanceState从saveInstanceState中获取保存过得值来重新初始化界面。
从android的API文档可以知道,onSaveInstanceState是在OnStop之前执行,onRestoreInstanceState在OnStart后执行,因此如果是Activity在手动点击back,销毁过后的话再启动数据就没有保存了,该功能就失效了。
其余情况(如下),都会调用改功能
1、当用户按下HOME键时
2、长按HOME键,选择运行其他的程序时
3、按下电源按键(关闭屏幕显示)时
测试代码
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save the current data, for instance when changing screen orientation
outState.putSerializable("dataset", mDataset);
outState.putSerializable("renderer", mRenderer);
}
@Override
protected void onRestoreInstanceState(Bundle savedState) {
super.onRestoreInstanceState(savedState);
// restore the current data, for instance when changing the screen
// orientation
mDataset = (XYMultipleSeriesDataset) savedState.getSerializable("dataset");
mRenderer = (XYMultipleSeriesRenderer) savedState.getSerializable("renderer");
}