一 四种模式只能在AndroidManifest定义;由开发者决定
1,standard
2,singleTop
3,singleTask
4,singleInstance
我是这样理解的,带有single的;翻译中文
仅有一个的; 单一的; 单个的;
standard 标准的;
singleTop就是顶部上只有一个;又名:栈顶复用模式
singleTask,一个Task内只有一个;又名:栈内复用模式
singleInstance;整个操作系统只有一个;又名:单例模式
- standard:标准模式
默认启动模式,启动activity时直接创建新的实例并压入启动它的任务栈顶。 - singleTop:栈顶复用模式
当前任务的栈顶已经存在着这个activity的实例,那么就不会创建新的实例,而是调用该实例的onNewIntent()方法。若不在栈顶就会新建一个实列;
位于栈顶时再次启动的生命周期
D/SingleTaskAActivity: --onCreate--
D/SingleTaskAActivity: --onStart--
D/SingleTaskAActivity: --onResume--
D/SingleTaskAActivity: --onPause--
I/SingleTaskAActivity: --onNewIntent --.
D/SingleTaskAActivity: --onResume--
- singleTask:栈内复用模式
没有它要的任务栈
系统会新创建一个任务,并将该activity实例化作为该任务的根activity。
有它要的任务栈
这时候系统会找到该任务栈,如果任务栈里只有它自己则直接调用该activity实例的onNewIntent()方法。如果任务栈中它的上方还存在别的activity,那么这些activity会被全部弹出栈。 - singleInstance:单例模式
会为activity单独创建一个任务并能够复用。但是该模式的activity不允许其他activity跟自己存在于同一个任务中,由此 activity 启动的任何 activity 均会被在其他的任务中打开。
二 Intent Activity Flag;由启动者决定;
如何选择Flag呢,Flag很多,记肯定是记不住的
下面的图是根据你希望这个TASK的过程而选择
1566064699(1).jpg
Intent.FLAG_ACTIVITY_SINGLE_TOP
同AndroidManifest.xml方式中的singleTop启动模式。
Intent.FLAG_ACTIVITY_NEW_TASK
同AndroidManifest.xml方式中的singleTask启动模式。
intent.setComponent(new ComponentName(this, StandardAActivity.class));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
三 TaskAffinity 是什么? (怎么结合使用的就不描述了太多了,容易晕)
Activity 的归属, 也就是 Activity 应该在哪个 Task 中. 一般情况下在同一个应用中, 启动的 Activity 都在同一个 Task 中.
每个 Activity 都有 taskAffinity 属性, 这个属性指出了它希望进入的 Task. 如果一个 Activity 没有显式的指明 taskAffinity, 那么它就会使用 Application 的 taskAffinity, 如果 Application 也没有指明, 那么该 taskAffinity 的值就等于包名.
四 启动模式的实际应用
singleTop :适用于同类型的activity;例如接收通知启动内容显示的页面,耗时操作返回页面,登陆页面
singleTask:使用与程序入口:weiview页面,扫一扫页面;确认订单页面;付款页面;
有如下启动流程,微信主页 >> 聊天页 >> 聊天设置页 >> 用户资料页 >> 聊天页,此时我们按下返回键直接回到了微信主页。
singleInstance:适用于需要和程序分离开的页面:闹铃响界面;来电页面;锁屏页;
网友评论