csonezp

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

http://www.cnblogs.com/csonezp/p/5121142.html

新买了一本书,《Android开发艺术探索》。这本书算是一本进阶书籍,适合有一定安卓开发基础,做过一两年安卓开发,但是又不是特别精通的开发者。感觉还不错。准备写写博客记录一下读书所得,增强一下记忆。

说到Activity生命周期,那不得不上一个图,基本上看完这个图,就能对生命周期有一个整体的认识。

我这里就总结一下各种情况下Activity生命周期的调用情况。

1,正常打开单个Activity,然后退出应用:

这种情况是最普通的状况,Activity的生命周期会按照上图从上到下的方式走。即:onCreate --> onStart --> onResume --> 运行--> 按返回键结束程序--> onPause-->onStop-->onDestory

 

2,打开一个Activity A,然后再打开另一个Activity B

对于A:

onCreate --> onStart --> onResume --> A运行 --> A发出打开B的Intent --> onPause-->B可见-->onStop

此时,会打开B,B同样会经历一个完整的Activity生命周期。等B结束,A再度可见的时候,A会经历:

onRestart-->onStart-->onResume

注意,B这个Activity是在A的onPause执行后才变成可见状态的,所以为了不影响B的显示,最好不要在onPause里执行一些耗时操作,可以考虑将这些操作放到onStop里,这时B已经可见了。

3,优先级低的Activity被系统回收

Activity优先级从高到低大致有三种:

1),前台Activity。可见的前台Activity优先级最高

2),可见,但非前台的Activity。例如弹出了一个对话框,Activity可见,但是不可与用户交互。此类别优先级低一些。

3),后台Activity。这个就是不可见的Activity。

系统资源不足时,会优先回收优先级低的Activity。这个时候被结束的Activity,并不会像正常的Activity一样,在销毁的时候会走onPause,onStop,onDestory这样的生命周期,而是会多一个onSaveInstanceState的方法来保存一些数据。这个方法会在onStop前调用,但是不确定是在onPause之前还是之后。Activity重建的时候,这个方法中所保存的数据会以Bundle的形式作为参数传递给onCreate,所以我们可以用参数来判断这个Activity是新建的还是重建的,如果是重建的,则可以从Bundle中取出数据来恢复界面。

 

posted on 2016-01-11 14:19  csonezp  阅读(744)  评论(0编辑  收藏  举报