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?
"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?