Activity的生命周期





Activity的生命周期始于onCreate(),止于onDestory()。




Activity的基本生命周期如下代码所示:
public classMyActivityextendsActivity{
protected voidonCreate(BundlesavedInstanceState);
protected voidonStart();
protected voidonResume();
protected voidonPause();
protected voidonStop();
protected voidonDestroy();
}


我们自己写的Activity会按需要重载这些方法,在一个Activity正常启动的过程中,他们被调用的顺序是onCreate->onStart->onResume,在Activity被pass掉的时候顺序是onPause->onStop->onDestroy,这样就是一个完整的生命周期,但是有人问了,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的一个Activity是全屏的那么:onPause->onStop,恢复的时候onStart->onResume,如果打断这个应用程序的是一个Theme为Translucent或者Dialog的Activity那么只是onPause,恢复的时候onResume。

详细介绍一下这几个方法中系统在做什么以及我们应该做什么:
onCreate:在这里创建界面,做一些数据的初始化工作
onStart:到这一步变成用户可见不可交互的
onResume:变成和用户可交互的,(在activity栈系统通过栈的方式管理这些个
Activity的最上面,运行完弹出栈,则回到上一个Activity)
onPause:到这一步是可见但不可交互的,系统会停止动画等消耗CPU的事情
从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候
你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在
onResume里读出来,注意:这个方法里做的事情时间要短,因为下一
个activity不会等到这个方法完成才启动
onstop:变得不可见,被下一个activity覆盖了
onDestroy:这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方
法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判
断它,如果你有一个ProgressDialog在线程中转动,请在onDestroy里
把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛
异常的。
onPause,onstop,onDestroy,三种状态下activity都有可能被系统干掉
为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库)。实际工作中因为生命周期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?因为Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般都是采用Android的消息机制[Handler,Message]来处理多线程和界面交互的问题。