广大博友,看过后帮忙顶顶,谢谢大家!!!
转载请注明: http://blog.csdn.net/richway2010/archive/2011/06/29/6574987.aspx
【博主:各位博友,网友们,大家网上好!欢迎光临本博客。 欢迎多多交流,多提意见,互相学习,互相进步,我们的口号是:好好学习,天天向上。】
看过很多关于activity生命周期的文章,大多都只是讲明一个图例流程,并没有把其中原理讲清楚,下面加上个人理解,分析一下它的生命周期。
跟其他手机平台的应用程序一样,Android的应用程序的生命周期是被统一掌控的,也就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,只能学习并适应它。
简单地说一下为什么是这样:我们手机在运行一个应用程序的时候,有可能打进来电话发进来短信,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能,另外系统也不允许你占用太多资源,至少要保证电话功能吧,所以资源不足的时候也就有可能被干掉。
看图:
对上图分析:
1、启动Activity执行的方法:onCreate()-->onStart()-->onResume()方法,此时程序处理运行状态。
方法原理:
onCreate: 在这里创建界面,做一些数据的初始化工作
onStart: 到这一步变成用户可见不可交互的
onResume: 变成和用户可交互的,(在activity栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)
2、结束Activity执行的方法:onPause()-->onStop()-->onDestory()方法,此时程序被销毁。
方法原理:
onPause:到这一步是可见但不可交互 的,系统会停止动画等消耗CPU 的事情,从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在onResume里读出来,注意:这个方法里做的事情时间要短,因为下一个activity不会等到这个方法完成才启动
onstop:变得不可见 ,被下一个activity覆盖了
onDestroy:这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判断它,如果你有一个Progress Dialog在线程中转动,请在onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常的。
3、onPause()-->onResume转化原理
Activity可以经常性地在resumed和paused状态之间切换,当activity处理运行状态时,有新的activity运行到前台,此时原activity将被压入栈,当前activity处于栈顶。
4、闲置很长时间的activity-->到运行状态过程
onStop()-->onRestart()-->onStart()-->onResume()-->activity running
注:处于onPause,onstop, onDestroy,三种状态下 activity都有可能会因为其它应用需要用内存,而被系统干掉。其它状态不会结束。