启动模式
Standard
标准模式
,默认的
SingleTop
又称栈顶复用
,和standard差不多,不同是如果当前Activity在栈顶则不会创建新的,调用它的onNewIntent.如果不在栈顶则正常在栈顶创建一个新的Activity
SingleTask
又称栈内复用
,如果当前Activity在栈内存在则将不会创建新的,调用它的onNewIntent方法并且清空它上面所有的ActivitySingleTask
会让被调用的Activity
在自己的Task
中被创建,而不是调用方的Task
中创建.并且入场动画也是应用间切换的动画,这个时候点返回,会显示这个Task
里的上一个Activity
,而不是直接返回到之前调用方的Task
.
实质上限制了这个Activity
全局只能有一个
SingleInstance
大致与SingleTask
相同,唯一一个不同是设置了该模式的Activity只能位于一个单独的任务栈中
,不能在有其他Activity,其他任何从该Activity启动的其他Activity都会放到其他的任务栈中。
在点击SingleInstance
的Activity中点击返回,会直接返回原先的App
从桌面进入SingleInstance
的Activity的App时发现这个Activity不见了,但并没有被杀死而是在后台蹲着,再次调用时再出现在前台并执行onNewIntent
实际应用
当我们用手势从桌面底部上划,弹出一个列表,这就是当前运行的Task
任务列表,每个单独的Task
中运行了一个个Activity
,表面上看我们在多个应用间切换,实际上是在多个Task
间切换
启动一个App
时,系统会创建一个Task
,将Activity
放进去,新打开的Activity
依次叠放在上面
每个Task
都有自己的回退栈记录了Activity
打开的顺序,当我们点击返回时,系统会从栈里移除当前Activity
,当所有Activity
都被移除时,这个Task
的生命也就随之结束了,系统会保留一个残影,手动清除就彻底没了,点击这个残影会重新启动这个Task
Activity
是可以跨应用跨进程的,例如我们的应用调用微信
,钉钉
的登录,那么这个登录Activity
是在我们应用的Task
中打开的,不会影响微信
,钉钉
本身的Task
.
Task从前台到后台
- 按Home或者手势上划回到桌面
- 查看最近任务
当Task
切换到后台
时,是不会叠加的,只有前台
的Task
才会叠加前台Task的叠加
短信
打开邮件
,邮件
是SingleTask
,这时候邮件
的Task会整个压在短信
的Task上面,直接返回会将邮件
的栈先清空然后返回短信
如果短信
打开邮件
后,点击了最近任务,这时邮件
的Task从前台切换到后台
,无法叠加,于是再从邮件点返回键会依次清空邮件
的栈并且返回到桌面
allowTaskReparenting
如果将Activity
的这个属性设置为true
,短信
打开邮件
,虽然这个界面显示在短信
的Task里,这时候再从桌面点开邮件
,那么这个Activity
会从短信
的Task中挪到放到邮件
的Task中,再回到短信
中,这个界面以及不存在了这个属性在安卓9,10中无效
TaskAffinity
一个App只有一个Task能显示在最近任务列表里,用来区别唯一性的是TaskAffinity
,每个Activity
都有一个TaskAffinity
属性,如果不设置,Activity
的默认取自Application
的,Application
的默认取自PackageName
每个Task
的TaskAffinity
取自栈底的Activity
的TaskAffinity
比如初次点开一个App,这个Task就会得到一个TaskAffinity
,就是他启动的第一个Activity
的TaskAffinity
,再启动一个Activity
时,就会在这个Task
中启动.但是如果这个Activity
是SingleTask
的,系统就会判断这个Activity
的TaskAffinity
是否和这个Task
的TaskAffinity
一致,如果不一致就去寻找一致的,如果没有,就会新建一个Task
.
TaskAffinity和最近任务列表
- 最近任务列表会列出现有的Task
- 但他们的TaskAffinity不一样
- 当多个Task出现相同的TaskAffinity时,最近任务会显示最新展示过的那一个
实际应用
- 默认和SingleTop,用于App内部
- SingleInstance,用于开放给外部App共享使用
- SingleTask,内部外部交互都用得上
学习自扔物线
的B站视频以及一些百度到的资料
视频地址:https://www.bilibili.com/video/BV1CA41177Se?spm_id_from=333.337.search-card.all.click