Activity的生命周期:
Activity(活动),是一种可以包含用户界面的组件,主要用于和用户进行交互。
Activity的生命周期有7个分别是:
1)、onCreate:当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。onCreate 方法有一个参数,该参数可以为空( null ),也可以是之前调用 onSaveInstanceState ()方法保存的状态信息。
2)、onStart :该方法的触发表示所属活动将被展现给用户。
3)、onResume :当一个活动和用户发生交互的时候,触发该方法。
4)、onPause :当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。
5)、onStop :当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发 onStop 方法。 所以保存状态信息是应该在onPause时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。
6)、onRestart :当处于停止状态的活动需要再次展现给用户的时候,触发该方法。
7)、 onDestroy :当活动销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。
下面来一张经典的Activity的生命周期图:
一个Activity的启动顺序:
05-05 10:08:58.811 6079-6079/com.zwb.activity_life D/MainActivity: ------onCreate 05-05 10:08:58.829 6079-6079/com.zwb.activity_life D/MainActivity: ------onStart 05-05 10:08:58.831 6079-6079/com.zwb.activity_life D/MainActivity: ------onResume
05-05 10:14:12.347 6079-6079/com.zwb.activity_life D/MainActivity: ------onPause 05-05 10:14:14.130 6079-6079/com.zwb.activity_life D/SecondActivity: ------onCreate 05-05 10:14:14.130 6079-6079/com.zwb.activity_life D/SecondActivity: ------onStart 05-05 10:14:14.133 6079-6079/com.zwb.activity_life D/SecondActivity: ------onResume 05-05 10:14:16.448 6079-6079/com.zwb.activity_life D/MainActivity: ------onStop
05-05 10:18:40.604 6079-6079/com.zwb.activity_life D/SecondActivity: ------onPause 05-05 10:18:40.685 6079-6079/com.zwb.activity_life D/MainActivity: ------onRestart 05-05 10:18:40.690 6079-6079/com.zwb.activity_life D/MainActivity: ------onStart 05-05 10:18:40.709 6079-6079/com.zwb.activity_life D/MainActivity: ------onResume 05-05 10:18:41.853 6079-6079/com.zwb.activity_life D/SecondActivity: ------onStop 05-05 10:18:41.854 6079-6079/com.zwb.activity_life D/SecondActivity: ------onDestroyActivity销毁的过程:
05-05 10:20:40.415 6079-6079/com.zwb.activity_life D/MainActivity: ------onPause 05-05 10:20:45.432 6079-6079/com.zwb.activity_life D/MainActivity: ------onStop 05-05 10:20:45.433 6079-6079/com.zwb.activity_life D/MainActivity: ------onDestroyActivity启动是直接按Home键返回桌面的时候;
05-05 10:21:55.431 6079-6079/com.zwb.activity_life D/MainActivity: ------onPause 05-05 10:21:57.342 6079-6079/com.zwb.activity_life D/MainActivity: ------onStop再次打开Activity的时候:
05-05 10:23:25.541 6079-6079/com.zwb.activity_life D/MainActivity: ------onRestart 05-05 10:23:25.600 6079-6079/com.zwb.activity_life D/MainActivity: ------onStart 05-05 10:23:25.601 6079-6079/com.zwb.activity_life D/MainActivity: ------onResume
Activity启动模式:
启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置;
启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;
(1) standard:默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。(2)singleTop:可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。
(3)singleTask:只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。
(4)singleInstance:只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。