转发请标明来源:http://blog.csdn.net/rflyee/article/details/50949683


onSaveInstanceState什么时候调用?onSaveInstanceState()的调用时机:
在activity的一个生命周期中,onSaveInstanceState()并非一定调用。 正如官网对该方法的解释所说:“ This method is called before an activity  may be killed  so that when it comes back some time in the future it can restore its state. ” 在“可能被系统杀死”之前调用。suo的很准确啊,先明白一点:如果一个activityA不可能在后台被系统主动kill掉,那么就不会调用该方法(记着这句话,稍后会解释)。
那么回过头,什么时候activity“可能被系统杀死”呢?官网也是有明确说明的:


总结说就是: onResume() 不会被杀。前台应用,系统是不会主动kill的。 on Pause()  HONEYCOMB(android3.0)之前,可能被杀;3.0之后不会被杀。 onStop() 可能被杀。
明确activity可能在生命周期中被杀的方法之后,根据上边说明便可知: android3.0之前:onResume() -- [ optional]onSaveInstanceState() -- onPause(),即调用onPause()之前, 可能调用onSaveInstanceState() android3.0之后: onResume() -- onPause() -- [ optional]onSaveInstanceState() -- onStop(),即调用onStop()之前, 可能调用onSaveInstanceState()

如上边特意提到一样,这里仍要注意“可能”,如果一个activityA不可能在后台被系统主动kill掉,那么就不会调用该方法。 比如一下逻辑: activityA.startActivity(activityB) activityA.finish() A启动了B,但是A自己把自己finish了,也就是说系统不可能主动kill activityA了,因此虽然A的onPause()、onStop()被调用,onSaveInstanceState()方法也是不会调用到的。 那么同理,默认情况下在一个activity中,返回退出也是不会调用onSaveInstanceState()的。
验证一下利用activity自动旋转会保存之前状态,并重新恢复的特点):
android2.3


android5.0




HomeActivity启动ActivityB,不finish自己:




HomeActivity启动ActivityB,finish自己:




转发请标明来源:http://blog.csdn.net/rflyee/article/details/50949683


参考:http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)






更多相关文章

  1. Android里解析AndroidManifest.xml的java文件
  2. Android(安卓)IPC 通讯机制源码分析
  3. android Tether 分析
  4. Android(安卓)recyclerview更新item位置移动
  5. Android音频系统之四AudioPolicy
  6. Android(安卓)使用WebView
  7. android开发教程系列(1)Activity
  8. App 启动页出现短暂闪屏的解决方案
  9. Android(安卓)- Intent基础

随机推荐

  1. Mysql实现全文检索、关键词跑分的方法实
  2. MySql使用mysqldump 导入与导出方法总结
  3. Mysql join联表及id自增实例解析
  4. MySQL之mysqldump的使用详解
  5. MySQL单表查询实例详解
  6. MySQL性能优化技巧分享
  7. Mysql数据库定时备份脚本分享
  8. MySQL如何实现事务的ACID
  9. MySql三种避免重复插入数据的方法
  10. 深刻解析 Android(安卓)的 AIDL