Android开发之Activity生命周期
Android应运程序的生命周期是由系统同意掌控的,也就是说,我们并不能改变一个应运程序的生命周期,只能学习并适应系统本身的生命周期管理机制。
为什么手机系统会有生命周期管理机制呢?简单点说,当你的手机运行了很多个应用程序的时候,你又想运行新的程序,或者有电话打来了,那么手机的资源是有限的,在有限的资源下,系统会优先地选择执行一些功能,比如打接电话,收发短信等等。那么,这时候,系统就会自动中断一些应运程序以保证优先级高的功能的运行。另外,当某个应用程序占用系统资源太高的时候,也有可能被干掉的哦。
那么接下来就来谈谈Android系统的Activity的生命周期,Google给出的Android开发文档给出了Activity的生命周期的代码,如下:
- public class ExampleActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // The activity is being created.
- }
- @Override
- protected void onStart() {
- super.onStart();
- // The activity is about to become visible.
- }
- @Override
- protected void onResume() {
- super.onResume();
- // The activity has become visible (it is now "resumed").
- }
- @Override
- protected void onPause() {
- super.onPause();
- // Another activity is taking focus (this activity is about to be "paused").
- }
- @Override
- protected void onStop() {
- super.onStop();
- // The activity is no longer visible (it is now "stopped")
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- // The activity is about to be destroyed.
- }
- }
你自己写Activity的时候,就需要按照需求来重载这些方法了。当然onCreate是必须有点饿,不然你的程序会运行不聊的。在一个Activity正常启动的时候,他被调用的顺序是:onCreate-->onStart-->onResume-->onPause-->onStop-->onDestory。而Activity要被干掉的话,也是有顺序的,就是onPause-->onStop-->onDestory,这就是一个完整的生命周期。也许你会问,如果程序正在运行着,我想运行其他程序怎么办呢?那就会onPause-->onStop,恢复的时候直接onStart-->onResume,如果打断这个应用程序的是一个Theme为Translucent 或者Dialog 的Activity那么只是onPause ,恢复的时候onResume 。
下面详细介绍一下在这些方法中我们都能做什么:
1、onCreate:在这里创建我们的界面,以及初始化数据的操作;
2、onStart:这里是用户可交互但是不可见的,因为他可能被隐藏或者被遮挡着;
3、onResume:这里用户也是可交互的,一个onPause的Activity要重新运行的话就会跳到这里来;
4、onPause:这一步是用户可见但是不可交互的。因为从这里,你的程序的优先级开始降低,也可能直接被干掉或者回收,所以在这里不能执行一些耗时或者耗费系统资源的操作,同时,我们还要在这里保存数据以便在onResume读出来。需要注意的是:在这个方法做的事情时间不能太长,因为下一个Activity不会等到这个方法执行完才启动的。
5、onStop:这里也是不可见的,被下一个Activity覆盖掉了。在这里可以执行onRestart方法来重新启用Activity。
6、onDestory:这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判断它,如果你有一个Progress Dialog在线程中转动,请在onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常的。
onPause、onStop、onDestory,这三种状态下的Activity都可能被系统干掉,所以为了保证程序的正常,你要在onPause方法里将用户编辑的内容以及需要保存的内容都保存到存储媒介上或者数据库中。
由于本人水平有限,所以可能有些地方理解错误或者没有说到的地方,欢迎大家指正!