分分钟 掌握 Android Activity生命周期(图文+源码) AND 保存Activity状态

发现一篇很不错的文章: 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、按下电源按键(关闭屏幕显示)时

4、从activity A中启动一个新的activity时

5、屏幕方向切换时,例如从竖屏切换到横屏时


测试代码

 @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");
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值