问:Activity A启动B,过程中的生命周期
activity A启动activity B的生命周期变化?B 不透明。
A onPause()—B onCreat()—B onStart()— B onResume() — A onStop();(B是半透明的,则A不会 onStop())
再关闭activity B的生命周期,B 不透明。
B onPause()—A onRestart()—A onStart()—A onResume()—B onStop()—B onDestroy()
问:Activty启动模式,什么时候会用到singleInstance?
- Standard 标准
- SingleTop 栈顶复用
- SingleTask 栈内复用
- SingleInstance 单实例模式,一种加强的SingleTask模式
启动模式的区别
- standard
- 重复创建多个实例
- 谁启动了这种模式的 Activity,新 Activity 就会运行在启动者所在的栈中
- ApplicationContext 启动 standard 的 Activity,会报错
- singleTop
- 如果位于栈顶则不会重复创建,不调用
onCreate
和 onStart
,直接调用 onNewIntent()
方法
- singleTask
- 只要 Activity 在一个栈中有实例,多次启动此 Activity 都不会创建实例,也是直接调用
onNewIntent()
- 启动 singleTask 的 Activity 时,系统会先找有没有想要的任务栈,没有就新建个任务栈;有就看栈里有没有实例
- 栈内有实例,就会把该 Activity 调到栈顶,同时 clearTop(之前在它前面的都被清除)
- 一般用于 MainActivity,因为回到首页后需要清除之前的页面
- singleInstance
- 就是霸道一点的 singleTask
- 启动后新建一个任务栈,这个栈里只会有它一个
- 拨号、闹钟
应用场景
- standard:普通展示页面
- singleTop :适用于展示通知详情的Activity,在点开某个通知后,再点开一个通知就复用
- singleTask:应用主页,MainActivity
- singleInstance:拨号、闹钟
(本专题会在工作日每天更新,有错误的地方,望指正。)