`
ET焖猪仔
  • 浏览: 235858 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类
最新评论

Android onSaveInstanceState和onRestoreInstanceState触发的时机

阅读更多
 先看Application Fundamentals上的一段话:

  Android calls onSaveInstanceState() before the activity becomes vulnerable to being destroyed by the system, but does not bother calling it when the instance is actually being destroyed by a user action (such as pressing the BACK key)

  从这句话可以知道,当某个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方法中做数据还原
分享到:
评论

相关推荐

    Android onSaveInstanceState和onRestoreInstanceState触发的时机

    Android onSaveInstanceState和onRestoreInstanceState触发的时机 Android 中的 onSaveInstanceState 和 onRestoreInstanceState 是两个重要的生命周期方法,它们在 Activity 的生命周期中扮演着关键角色。了解这...

    Android状态保存

    为了实现Activity状态的保存与恢复,Android提供了两种主要方法:`onSaveInstanceState()`和`onRestoreInstanceState()`。 1. **onSaveInstanceState()**: - 当Activity被销毁前(如切换到后台、屏幕旋转等),...

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

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

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

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

    android activity 生命週期

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

    Androiid应用前后台切换

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

    Android入门

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

    安卓生命周期

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

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

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

    幻灯片播放图片

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

    ActivitylifecycleandstateHW:在家工作

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

Global site tag (gtag.js) - Google Analytics