启动模式与任务栈
Activity 的四种启动模式?
启动模式
作用
standard
默认启动模式,每次启动都会创建新的Activity实例,并放到栈顶
singleTop
栈顶复用,如果要启动的Activity在栈顶已经有实例,则复用这个实例并调用 onNewIntent方法
singleTask
栈内复用,如果Activity所指定的任务栈(可在清单文件中通过 taskAffinity 指定)中已经有实例,则复用这个实例,并将此实例上面的Activity全部出栈,将此Activity置于栈顶
singleInstance
单例复用,只会创建一次,并且Activity实例处于单独的任务栈中,且是任务栈中唯一的 Activity。
谈谈 singleTop
和 singleTask
的区别以及应用场景
singleTop
和 singleTask
的区别以及应用场景singleTop 是当要启动的Activity 在当前任务栈顶有实例时会复用并调用onNewIntent方法,适用于重复事件的落地页,比如通知详情。
singTask 单独任务栈,比如浏览器。
onNewIntent()调用时机?
Activity 实例复用时调用。
了解哪些 Activity 启动模式的标记位?
通过 AndroidManifest 设置
standard
singleTop
singleTask
singleInstance
通过 Intent.addFlags() 设置
FLAG_ACTIVITY_SINGLE_TOP:同 singleTop
FLAG_ACTIVITY_NEW_TASK:同 singleTask
FLAG_ACTIVITY_CLEAR_TOP:将 Activity 上面的其他 Activity 出栈,如果同时指定
FLAG_ACTIVITY_SINGLE_TOP 则会复用,否则会重建
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:具有该标记的Activity不会出现在历史Activity的列表中,即无法通过历史列表回到该Activity上
FLAG_ACTIVITY_NO_ANIMATION:不使用动画
....
通过Intent 设置的启动模式标记位优先于清单中设置的标记位。
相关链接
最后更新于
这有帮助吗?