抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

启动模式

Standard

标准模式,默认的

SingleTop

又称栈顶复用,和standard差不多,不同是如果当前Activity在栈顶则不会创建新的,调用它的onNewIntent.如果不在栈顶则正常在栈顶创建一个新的Activity

SingleTask

又称栈内复用,如果当前Activity在栈内存在则将不会创建新的,调用它的onNewIntent方法并且清空它上面所有的Activity
SingleTask会让被调用的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
每个TaskTaskAffinity取自栈底的ActivityTaskAffinity
比如初次点开一个App,这个Task就会得到一个TaskAffinity,就是他启动的第一个ActivityTaskAffinity,再启动一个Activity时,就会在这个Task中启动.但是如果这个ActivitySingleTask的,系统就会判断这个ActivityTaskAffinity是否和这个TaskTaskAffinity一致,如果不一致就去寻找一致的,如果没有,就会新建一个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

评论