`

onSaveInstanceState和onRestoreInstanceState触发的时机

 
阅读更多
当某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的时候。
注意上面的双引号,何为“容易”?言下之意就是该activity还没有被销毁,而仅仅是一种可能性。这种可能性有哪些?通过重写一个activity的所有生命周期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我们可以清楚地知道当某个activity(假定为activity A)显示在当前task的最上层时,其onSaveInstanceState方法会在什么时候被执行,有这么几种情况:
1、当用户按下HOME键时。
这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则
2、长按HOME键,选择运行其他的程序时。
3、按下电源按键(关闭屏幕显示)时。
4、从activity A中启动一个新的activity时。
5、屏幕方向切换时,例如从竖屏切换到横屏时。

在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行。
总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。
至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的,onRestoreInstanceState被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行。
另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,你也可以选择在onCreate方法中做数据还原。


http://justsee.iteye.com/blog/1113104

http://www.cnblogs.com/hanyonglu/archive/2012/03/28/2420515.html
分享到:
评论
2 楼 vigiles 2015-10-11  
飞扬云 写道
请问:

关于onSaveInstanceState,有一点不是很明白,你说当某个activity变得“容易”被系统销毁时,系统会调用onSaveInstanceState来保存“某些非永久性的数据”。我的问题是:既然activity都被消亡了,那应该是保存永久性的数据才对,而onpause可以用来保存临时性数据和永久性数据。因为activity消亡后再重新创建,你用onSaveInstanceState保存的临时性数据也不会有用处,应该恢复onpause保存的永久性数据,这样理解你觉得是否合理?


不是保存临时性的数据,而是临时性的保存数据
1 楼 飞扬云 2011-12-02  
请问:

关于onSaveInstanceState,有一点不是很明白,你说当某个activity变得“容易”被系统销毁时,系统会调用onSaveInstanceState来保存“某些非永久性的数据”。我的问题是:既然activity都被消亡了,那应该是保存永久性的数据才对,而onpause可以用来保存临时性数据和永久性数据。因为activity消亡后再重新创建,你用onSaveInstanceState保存的临时性数据也不会有用处,应该恢复onpause保存的永久性数据,这样理解你觉得是否合理?

相关推荐

    Android onSaveInstanceState和onRestoreInstanceState触发的时机

    Android onSaveInstanceState和onRestoreInstanceState触发的时机 Android 中的 onSaveInstanceState 和 onRestoreInstanceState 是两个重要的...了解这两个方法的触发时机和使用方法对于开发者来说是非常重要的。

    Android状态保存

    - 若来电导致Activity A被销毁,则重新启动Activity A时,会经历:`onCreate()` → `onStart()` → `onResume()`,并通过`onSaveInstanceState()`和`onRestoreInstanceState()`恢复之前的状态。 #### 五、总结 ...

    移动应用开发实验报告.docx

    2. **实现生命周期方法**:在主Activity中实现所有生命周期回调方法,并在每个方法中添加日志输出语句,以便于观察每个生命周期阶段的触发时机。 #### 三、实验环境配置 为了顺利完成实验,需要准备以下硬件和软件...

    Android代码-图像冰冻特效源码.zip

    这可能涉及到 onSaveInstanceState() 和 onRestoreInstanceState() 方法,或者是使用 Bundle 来保存和恢复数据。 7. **用户体验**:最后,一个好的冰冻特效不仅要技术实现到位,还要考虑用户体验。如何平滑地过渡到...

    Androiid应用前后台切换

    5. **保存和恢复状态**:在`onSaveInstanceState()`和`onRestoreInstanceState()`方法中,开发者可以保存和恢复Activity的状态,比如用户在文本框中的输入或游戏进度,确保在应用重新启动后能恢复到离开时的状态。...

    android activity 生命週期

    通过理解每个回调方法的作用和时机,开发者可以优化应用性能,提高用户体验。例如,在适当的回调方法中进行资源释放和状态保存,可以避免内存泄漏和数据丢失的问题。同时,合理利用生命週期中的回调,可以增强应用的...

    安卓生命周期

    此外,了解如何处理后台服务(Service)的生命周期,以及广播接收器(BroadcastReceiver)的触发时机,也是Android开发中不可或缺的部分。 总之,深入理解并熟练掌握Android生命周期是成为一名合格Android开发者的...

    幻灯片播放图片

    这可以通过重写`onSaveInstanceState()`和`onRestoreInstanceState()`方法来实现。 综上所述,创建一个仿系统原生相册的图片幻灯片播放器涉及到`SurfaceView`的利用、图片加载与缓存策略、动画效果实现、手势检测、...

    安卓开发视频教学(完整全集迅雷下载链接)

    - onSaveInstanceState() 和 onRestoreInstanceState() 方法的应用场景分析。 - 活动之间数据传递机制:Intent传值、Bundle封装数据等。 #### 五、Activity与Intent - **知识点介绍**:进一步探索Activity之间的...

    Android入门

    - 理解每个生命周期方法的作用和调用时机。 - 在适当的地方处理资源释放等逻辑。 10. **实现生命周期回调方法** - 根据需求重写相应的方法。 - 如`onCreate()`, `onStart()`, `onResume()`等。 11. **保存...

    ActivitylifecycleandstateHW:在家工作

    通过重写`onSaveInstanceState()`和`onRestoreInstanceState()`,开发者可以保存和恢复Activity的状态,防止数据丢失。 - **后台服务管理**:在家工作可能涉及更多后台服务的使用,如视频会议。开发者需要确保服务在...

Global site tag (gtag.js) - Google Analytics