阅读 193

Activity的生命周期及启动模式(简述activity生命周期的四种状态)

一. activity的生命周期及启动模式

 1.1 生命周期

 

1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。

2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。

3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。

4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。

7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

1.2 启动模式


Standard(标准模式,默认)        SingleTop(栈顶复用模式)

SingleTask(栈内复用模式)         SingleInstance(单实例模式)

 

通过AndroidManifest可配置Activity的LaunchMode.如果没有配置,默认是Standard模 式。

 

1. Standard :

标准启动模式就是没有特殊配置的Activity。该启动模式下会一直创建Activity并将该Activity压入启动他的Activity所在的TaskRecord中。


  2. SingleTop(栈顶复用模式) :

只有当Activity位于栈(TaskRecord)顶的时候,再次启动当前的Activity,复用栈顶的Activity实例。不会重复创建。如果位于栈(TaskRecord)内(中间位置),则与标准模式相同,仍然会重新创建实例。

例子:给Test1和Test2分别设置回到自身的按钮 , 但是Test1设置为SingTop,Test2则为默认

image.pngimage.pngimage.png

查看Log:

image.png截图1.1

截图1.1,当进入到"Test1"后,我们单击两次"JUMP TO SELF"后可以发现,text1的生命周期,并没有因为回到自身而产生停止,创建等生命阶段,而是直接到达"onResume"阶段;

image.png截图1.2

截图1.12 当我们进入到"Test2",我们单击两次"JUMP TO SELF"后可以发现,text2的生命周期,可以看到,就像跳转到一个新的activity中一样.


3. SingleTask(栈内复用模式) :

 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时, 会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

 通过将"Test1"设为栈内复用模式,然后使"Test2"入栈,位于栈顶,来测试

 

image.png截图1.13  

可以看到,当跳转到"Test1"时,"Test2"最后被销毁,而"Test1"未执行onCreate

而是onRestart.


4. SingleInstance( 单实例模式 ) :

singleInstance”是单独存在于一个任务中,是任务的根Activity,且任务中有且仅有该Activity实例。

image.png截图1.14 看到Test1已经不与MainActivity,Test2在同一栈内了,

而且在实验过程中可以发现,当按下Home键前的界面如果是在设置为SingleInstance的Test1页面,再次打开应用时,MainActivity将会出现在首页.

activity的生命周期和启动模式先介绍到这里,如果对栈内复用模式和单实例模式感觉不太清楚的话,可以移步到我以前的文章# Activity LunchMod(1)以及# Activity LunchMod(2)


作者:让我康康_叹号_
链接:https://juejin.cn/post/7029149341726015502


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐