android LaunchMode之SingleTask

本文详细解释了Android应用中SingleTask模式的Activity如何在任务中工作,包括其内部机制、行为表现以及与其他Activity的关系。通过实例分析,帮助开发者理解如何正确使用SingleTask模式来优化应用体验。

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

昨天看了一下SingleTask的LaunchMode,意思是说如果一个Activity在Manifest文件中的LaunchMode设置为SingleTask时,该Activity就在一个独立的Task中。当时看了文档之后,有点不明白的是“在一个独立的task中”如何理解?

其实,这句话的意思是保证这个activity处于"某一个"task中,而不管当前task中是否有其他activity(这也许就是与SingleInstance的根本区别吧)。例如,我们有Root Activity A,在A中启动了ActivityB(launch mode是sinleTask)。这时Application Task的stack是B A,如果我们回到Home,启动另一个Application的Activity C,如果在C中启动B,则系统会将之前的Task Stack放到前台。这时用户看到的就是B。当按back时返回的是B的前一个Activity A.再back时退出前一个stack,回到当前的stack,即C。

考虑另一种情况,B依旧是SingleTask的. 在一个Application的Task Stack中有C B A,然后在另一个Application中启动B。这时会发生什么?

答案是:系统会把前一个Task放到前台,但是它的stack已经变成B A,C已经被系统丢弃了。

总结:1、SingleTask的Activity只能在一个Task中,系统总是能找到一个已经存在的Activity;

2、当在其他app中调用(或者在同一个activity stack中调用)某个singleTask的Activity时,需要注意:系统会把这个Activity之上的activity都清空,并将它所在的Task Stack置于前台,可能会导致其他APP的状态丢失。例如activity statck有两个SingleTask的B A,如果从B切换到A,则B会从栈顶清除,只剩下A。

补充一下singleInstance的感受:

single instance有点像single task,它总是一个activity占据一个task stack。在同一个app中,A->B,会有两个stack,B在前,A在后,如果此时B->C,会出现以下情况:

C

A      B

如果退出C,返回到A,退出A,返回到B

如果是在其他的app中X-B

B  X

如果此时再B->C,则会出现如下:

C B X

返回时依次显示。

adb shell dumpsys activity查看task stack.

最后:推荐某个做出实验的blog http://blog.csdn.net/liuhe688/article/details/6754323

转载于:https://my.oschina.net/kingguary/blog/36120

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值