说launchMode
需要说下几个概念:
task
:可以包含多个不同进程的activity。
activity
: 只属于某个进程。
可以通过XML设置的有四种:
standard
:默认方式
singleTop
:当C设置这个属性 A->B>C
打开C时 还是 A->B>C
,会调用onNewIntent();
当C设置这个属性 A->C->B
打开C时 还是 A->C->B->C
。
singleTask
:当taskAffinity相同时,并且C设置这个属性 A->C->B
打开C时 还是 A->C
;单独设置taskAffinity
无效,走的还是默认的taskAffinity
,相当于standard;单独设置singleTask,走的是默认taskAffinity
,然后会清除之后的activity。
singleInstance
:开发中使用最少,我没有使用过,使用时会新建一个task,并且只有一个实例。
然后是代码通过FLAG 组合设置 组合非常多
常用的有:
FLAG_ACTIVITY_CLEAR_TOP
+FLAG_ACTIVITY_SINGLE_TOP
相当于默认taskAffinity
的singleTask
。
单独设置FLAG_ACTIVITY_CLEAR_TOP
:A->B-C 打开 B设置属性打开 A->B 重建B
FLAG_ACTIVITY_SINGLE_TOP
与xml设置一样
还有很多不一一列举
还有的考点是onNewIntent
返回的intent是最新的,但是如果不调用setIntent
设置。其他地方getIntent
获取的是之前的intent。