覆盖 onSaveInstanceState(Bundle) 方法并不仅仅用于处理与设备旋转相关的问题。用户离开当前activity用户界面,或Android需要回收内存时,activity也会被销毁。(例如,用户按了主屏幕键,然后播放视频或玩起游戏。)

        基于用户体验考虑,Android从不会为了回收内存,而去销毁可见的activity(处于暂停或运行状态)。只有在调用过 onStop() 并执行完成后,activity才会被标为可销毁。
        系统随时会销毁掉已停止的activity。不用担心数据丢失,activity停止时,会调用onSaveInstanceState(Bundle) 方法的。所以,解决旋转数据丢失问题,就是抢在系统销毁activity之前保存数据。
        保存在 onSaveInstanceState(Bundle) 的数据该如何幸免于难呢?调用该方法时,用户数据随即被保存在 Bundle 对象中,然后操作系统将 Bundle 对象放入activity记录中。
        为便于理解activity记录,我们增加一个暂存状态(stashed state)到activity生命周期,如图所示。
        activity暂存后, Activity 对象不再存在,但操作系统会将activity记录对象保存起来。这样,在需要恢复activity时,操作系统可以使用暂存的activity记录重新激活activity。

        注意,activity进入暂存状态并不一定需要调用 onDestroy() 方法。不过, onStop() 和onSaveInstanceState(Bundle) 是两个可靠的方法(除非设备出现重大故障)。因而,常见的做法是,覆盖 onSaveInstanceState(Bundle) 方法,在 Bundle 对象中,保存当前activity的小的或暂存状态的数据;覆盖 onStop() 方法,保存永久性数据,如用户编辑的文字等。 onStop() 方法调用完,activity随时会被系统销毁,所以用它保存永久性数据。


        那么暂存的activity记录到底可以保留多久?前面说过,用户按了后退键后,系统会彻底销毁当前的activity。此时,暂存的activity记录同时被清除。此外,系统重启的话,暂存的activity记录也会被清除

--------------来源于《Android权威编程指南》

更多相关文章

  1. Android轻量级数据SparseArray详解
  2. Android(安卓)IntentService源码分析
  3. Android拾萃 - RxJava2之创建操作符及其demo
  4. Adapter 要从源头开始适配
  5. Android读写XML(中)
  6. Android(安卓)CountDownTimer 倒计时器的简单使用
  7. Android获取其他包的Context实例,然后调用它的方法
  8. Android(安卓)设计秘籍 part1
  9. Android(安卓)中 View 炸裂特效的实现分析 《IT蓝豹》

随机推荐

  1. 原生Android也能做Web开发了
  2. 使用android studio 查看 android 的源代
  3. Android画图学习总结(五)——Paint
  4. Android是什么
  5. android 字符串、颜色和尺寸
  6. Android(安卓)EditText/TextView使用Span
  7. android 开发之旅
  8. 为什么Android官方废弃SoftRefrerence软
  9. Android中添加思源字体/NotoSansCJK/Sour
  10. 高手速成android开源项目【tool篇】