Android Activity 生命周期研究记录

来源:互联网 发布:软件行业会计处理 编辑:程序博客网 时间:2024/05/16 09:19

        Android Activity的生命周期分析,网上一抓就是一大把,但是总感觉太泛泛而谈,重复东西太多了。最近收到这样的需求:产品经理要求app的部分设置在用户退出app后再次进入app时,这部分设设置回复默认值,但是,如果用户在应用中切换Activity后,应该保留被改动的设置。可以选择的方案很多,几经调研,分析利弊之后,笔者准备从Activity的生命周期下手,于是,这篇文章诞生了。

        根据需求,我理出里需要关注的主要Method:

onCreate(Bundle savedInstanceState)

---- onRestoreInstance(Bundle savdeInstanceState)

---- onSaveInstanceState(Bundle outState)

onDestory()


        原因如下:

  1. onCreate和onDestory是入口和出口,我们可以知道app是否启动或退出
  2. 但是onCreate有两种情况调用,一种是第一次(这里指完全退出app后)启动这个Activity时,另一种是当这个Activity处于后台并且手机内存不足时,它可能被回收,此时从其他Activity返回时会调用onCreate,只要通过调研,弄清楚onCreate时到底是不是第一次启动这个Activity即可。所以笔者向导里这两个Method:onRestoreInstance() & onSaveInstanceState()

         于是写demo,打印日志观察:

case 1 启动app,从mainActivity跳转到Activity2,然后点击返回按钮返回,mainActivity的日志日下:

onCreate()    savedInstanceState 此时为null

---- startActivity()

onSaveInstanceState()

onDestory()

---- 从Activity2返回MainActivity

onResume()    

case 2 在开发人员选项里打开设置“不保留活动”,步骤同case 1

onCreate()    savedInstanceState 此时为null

---- startActivity()

onSaveInstanceState()

onDestory()

---- 从Activity2返回MainActivity

onCreate(Bundle savedInstanceState)  savedInstanceState 此时不为null

---- onRestoreInstance(Bundle savdeInstanceState)

onResume()    


对比case1和 case2的log,观察到明显的不同

---- onCreate(Bundle savedInstanceState)  savedInstanceState 此时不为null

---- onRestoreInstance(Bundle savdeInstanceState)

onResume()    


  观察日志可以得出结论:如果Activity被回收,再次返回它时,onCreate中会有 savedInstatceState对象,并且onRestoreInstance会被调用。得出结论后,笔者思路也清晰了,要做的就是在onSaveInstanceState中保存一个标记,再onCreat中进行标记判断即可。


笔者不喜欢篇幅过长的技术博客,这样会使阅读者容易疲乏,接下来笔者会整理demo,上传后在博客中更新。


参考资料:

http://developer.android.com/reference/android/app/Activity.html

http://blog.csdn.net/liuhe688/article/details/673340

http://blog.csdn.net/android_tutor/article/details/5772285

0 0
原创粉丝点击