Activity启动模式

本文详细解释了Android中Activity的不同启动模式,包括multiple、singleTop、singleTask和singleInstance的特点及应用场景,并通过具体示例说明这些模式如何影响Activity生命周期。

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

android:launchMode=["multiple" | "singleTop" |
"singleTask" | "singleInstance"]
211.98.2.4
61.233.9.61



那时年少 官路 曾许诺






android:launchMode="singleTask"
老肥(184589377) 11:07:20
比如我们有A,B, C, D四个Activity
老肥(184589377) 11:07:32
其中B的启动模式为singleTask
可可(77855072) 11:08:02

老肥(184589377) 11:08:10
我的Activity的启动分别为 A->B->C->D->C->B->A
老肥(184589377) 11:08:24
按返回就是A->B->A
老肥(184589377) 11:08:41
在堆栈里面,它记录了B的上一个Activity是A
老肥(184589377) 11:08:53
就最开始谁启动了B
老肥(184589377) 11:08:57
它就记录下那个
老肥(184589377) 11:09:02
其他的都不管
老肥(184589377) 11:09:36
当C->B的时候
老肥(184589377) 11:09:51
B以上的Activity被移出堆栈
老肥(184589377) 11:10:08
也就是此时栈里只有A和B


android:launchMode="singleTask"



singleInstance

例子:A->B->C->D->B->A

按返回键结果是:A->D->C->A->B

A->D->C->A在一个栈里,所以按返回键是这样的顺序

而B在一个独立的堆栈里面,当另外那个堆栈没了以后,才回到B的这个栈

例子:A->B->C->D->B->A
按返回键结果是:A->D->C->A->B

例子:A->B->C->D->B
按返回键结果是:B->D->C->A




singleTop
老肥(184589377) 11:26:39
就是如果是A->A
老肥(184589377) 11:26:46
这样就不会生成多一个实例
可可(77855072) 11:26:48
就是最后放上去的一个是把
老肥(184589377) 11:26:53
如果是A->B->A
老肥(184589377) 11:26:59
还是会生成新的


老肥 11:02:41
每个应用,可以有多个task
老肥 11:02:54
但一般情况下是只有一个task
老肥 11:03:01
每个task有一个taskId




singleTask的不能做被启动的Activity,可以做启动的Activity
singleInstance的都不能做。



11-21 17:02:19.964: E/AndroidRuntime(18763): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值