Activity启动模式系列(八)singleInstance与singleTask对比

本文参考官方文档及相关博客,探讨Android启动模式。实验发现与官方所说不同,未创建新任务。还介绍了singleInstance下栈内只能有一个activity。最后总结singleTask和singleInstance的不同点与相同点,不同点包括栈内Activity情况、受taskAffinity影响情况等,相同点是全局单例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考链接:

https://developer.android.com/guide/components/activities/tasks-and-back-stack

https://developer.android.com/guide/topics/manifest/activity-element

https://blog.youkuaiyun.com/zjwfan/article/details/52047719

官方原文是这么说的:

"singleTask"

The system creates a new task and instantiates the activity at the root of the new task. However, if an instance of the activity already exists in a separate task, the system routes the intent to the existing instance through a call to its onNewIntent() method, rather than creating a new instance. Only one instance of the activity can exist at a time.

官方说 会 create a new task  然后,实验下来,并没有create a new task。

Note: Although the activity starts in a new task, the Back button still returns the user to the previous activity.

"singleInstance".

Same as "singleTask", except that the system doesn't launch any other activities into the task holding the instance. The activity is always the single and only member of its task; any activities started by this one open in a separate task.

意思是说在singleInstance下,栈内只能有一个activity

根据第二个链接,摘录下面官方的文档

singleTask”和“singleInstance”模式同样只在一个方面有差异: “singleTask”Activity 允许其他 Activity 成为其任务的组成部分。 它始终位于其任务的根位置,但其他 Activity(必然是“standard”和“singleTop”Activity)可以启动到该任务中。 相反,“singleInstance”Activity 则不允许其他 Activity 成为其任务的组成部分。它是任务中唯一的 Activity。 如果它启动另一个 Activity,系统会将该 Activity 分配给其他任务 — 就好像 Intent 中包含 FLAG_ACTIVITY_NEW_TASK 一样。

用例启动模式多个实例?注释
大多数 Activity 的正常启动standard默认值。系统始终会在目标任务中创建新的 Activity 实例并向其传送 Intent。
singleTop有条件如果目标任务的顶部已存在一个 Activity 实例,则系统会通过调用该实例的 onNewIntent() 方法向其传送 Intent,而不是创建新的 Activity 实例。
专用启动
(不建议用作常规用途)
singleTask系统在新任务的根位置创建 Activity 并向其传送 Intent。 不过,如果已存在一个 Activity 实例,则系统会通过调用该实例的 onNewIntent() 方法向其传送 Intent,而不是创建新的 Activity 实例。
singleInstance与“singleTask"”相同,只是系统不会将任何其他 Activity 启动到包含实例的任务中。 该 Activity 始终是其任务唯一仅有的成员。

-------------------------------------------------------------------------------------------------------------------------------------

 

 

 

======================================================

根据前面几篇关于启动模式的篇章做以下总结:

不同点(1)singleTask栈内可以有其他Activity,singleInstance栈内只能有它自己

          (2)singleTask受taskAffinity影响,singleInstance不受taskAffinity影响

          (3)singleTask如果实例已经存在,则会销毁在其之上的其它Activity,singleInstance则只会简单的把该栈移到最顶端,不会销毁Activity

相同点 :全局单例

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值