美文网首页
launchmode与TaskAffinity

launchmode与TaskAffinity

作者: feifei_fly | 来源:发表于2021-01-19 14:58 被阅读0次

一、TaskAffinity 任务亲和性

taskAffinity 任务栈亲和性

  • taskAffinity相同的activity理应归属于同一个Task。

  • 每个Activity都可以设置taskAffinity,当Activity未设置时,默认会和applicatio的taskAffinity保持一致;当Application也未显式设置taskAffinity时,默认会设置成package包名。

  • taskAffinity标签 仅在和SingleTask和FLAG_ACTIVITY_NEW_TASK 配合使用时才有效果,否则无效。

二、launchmode Activity的启动模式

2.1、standard

默认模式,当Intent发送的时候,每次打开都会创建一个新的Activity实例

2.2、singleTop

栈顶复用:

当前activity已经在栈顶的话,则不会再创建一个新的activity,通过onNewIntent()将intent发送给现有的Activity。

2.3、singleTask

栈内复用

2.3.1、理解

  • 启动一个singleTask模式的activity,会首先在系统中找与它的taskAffinity属性一致的任务栈。
1、没有特别指定taskAffinity,则为当前的task
2、如果指定了taskAffinity,先在系统中查找相同taskAffinity的task,如果找不到则创建一个新的task,将activity作为root放置其中。
  • 找到task之后,如果任务栈中已存在该activity,那么会将上层的所有activity弹出;否则会新创建一个Activity,放入Task中。
  • 如果当前activity是在新的任务栈中打开的话,那么之后在该activity中通过默认方式启动的activity都在这个新的任务栈(这和singleInstance是有区别的)
  • 如果是在新的任务栈中启动的话,最近任务列表(android的多任务键按下后)会有两个,可选择返回至相应的任务栈

2.3.2、试验:

MainActivity 和StandActivity是stand模式,SingleTaskActivity是singleTask模式:

(1)SingleTaskActivity未设置taskAffinity

跳转流程:MainActivity->SingleTaskActivity->StandActivity

Activity栈情况:

stack 0:
StandardActivity
SingleTaskActivity
mainActivity
(2)SingleTaskActivity设置了taskAffinity = "com.sogou.xxx"

跳转流程:MainActivity->SingleTaskActivity->StandActivity

Activity栈情况:

stack 1:
StandActivity
SingleTaskActivity

stack 0:
MainActivity

2.4、singleInstance

2.4.1、理解

  • 无论设置taskAffinity与否,singleInstance都会新创建一个Task
  • 新创建的activity 是新task中唯一仅有的成员
  • 之后在该activity中启动的activity都不会在其所在的task中.

2.4.2、试验

MainActivity 和StandActivity是stand模式,SingleInstanceActivity是singleInstance模式:

(1) SingleInstanceActivity未设置taskAffinity

跳转流程:MainActivity->SingleInstanceActivity->StandActivity

Activity栈情况:

task0:
StandActivity
MainActivity

task1:
SingleInstanceActivity

Android 多任务栏中 只有一个task

(2)SingleInstanceActivity设置taskAffinity="com.sogou.xxx"

跳转流程:MainActivity->SingleInstanceActivity->StandActivity

Activity栈情况:

task0:
.StandActivity
.MainActivity

task1:
SingleInstanceActivity

Android 多任务栏中可以看到有两个task

小结:

  • singleTask 未设置taskAffinity时,不会创建新的Task;指定了taskAffinity时,才会创建一个新的task
  • singleInstance模式启动Activity时,无论设置taskAffinity与否,都会创建新的Task
  • sinleTask 创建新Task之后,再启动Activity,会归属在新Task栈;singleInstance创建新Task之后,再创建Activity,不会处于当前Task栈中。

三、参考文章

https://www.jianshu.com/p/a3958f0a60f6

https://www.jianshu.com/p/c1386015856a

相关文章

网友评论

      本文标题:launchmode与TaskAffinity

      本文链接:https://www.haomeiwen.com/subject/rhoqzktx.html