Activity的生命周期及启动模式 | 您所在的位置:网站首页 › activity跳转到半屏activity得生命周期 › Activity的生命周期及启动模式 |
「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战」 一. 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则为默认 查看Log: 截图1.1 截图1.1,当进入到"Test1"后,我们单击两次"JUMP TO SELF"后可以发现,text1的生命周期,并没有因为回到自身而产生停止,创建等生命阶段,而是直接到达"onResume"阶段; 截图1.2 截图1.12 当我们进入到"Test2",我们单击两次"JUMP TO SELF"后可以发现,text2的生命周期,可以看到,就像跳转到一个新的activity中一样. 3. SingleTask(栈内复用模式) : 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时, 会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 通过将"Test1"设为栈内复用模式,然后使"Test2"入栈,位于栈顶,来测试
截图1.13 可以看到,当跳转到"Test1"时,"Test2"最后被销毁,而"Test1"未执行onCreate 而是onRestart. 4. SingleInstance( 单实例模式 ) : singleInstance”是单独存在于一个任务中,是任务的根Activity,且任务中有且仅有该Activity实例。 截图1.14 看到Test1已经不与MainActivity,Test2在同一栈内了, 而且在实验过程中可以发现,当按下Home键前的界面如果是在设置为SingleInstance的Test1页面,再次打开应用时,MainActivity将会出现在首页. activity的生命周期和启动模式先介绍到这里,如果对栈内复用模式和单实例模式感觉不太清楚的话,可以移步到我以前的文章 # Activity LunchMod(1)以及# Activity LunchMod(2) |
CopyRight 2018-2019 实验室设备网 版权所有 |