1、LaunchMode
- standard(标准模式)
Activity的默认启动模式,每次startActivity都会重新创建一个Activity实例,不管之前是否已经存在该Activity实例。被启动的Activity实例会进入到启动它的Activity所属的任务栈中。
- singleTop(栈顶复用模式)
如果待启动Activity在当前任务栈存在实例,并且实例位于栈顶,则启动Activity不会重新创建实例,而是直接复用之前的实例。同时,Activity的onNewIntent()方法会被调用,而生命周期函数onCreate()、onStart()不会被调用。
- singleTask(栈中复用模式)
如果待启动Activity在其所属任务栈(TaskAffinity,默认为应用package name)中存在实例,则复用该实例。与singleTop类似,Activity的onNewIntent()方法也会被调用,而生命周期函数onCreate()、onStart()不会被调用。同时,singleTask自带clearTop效果,即任务栈中位于其上方的其他Activity会直接出栈,销毁。
- singleInstance(单例模式)
强化版singleTask模式。首次启动时,单独为其创建一个任务栈,创建该Activity实例,压入栈中。之后,所有启动该Activity的请求都会复用该实例。
2、Flags
- FLAG_ACTIVITY_SINGLE_TOP
对应singleTop启动模式
- FLAG_ACTIVITY_NEW_TASK
对应singleTask启动模式
- FLAG_ACTIVITY_CLEAR_TOP
启动Activity时,使用该标志会将栈中该Activity实例上方包括该实例在内的所有实例均做出栈操作,然后重新创建该Activity实例入栈。
3、IntentFilter
- IntentFilter需要同时匹配action、category、data信息,才算匹配成功。
- 一个Activity可以有多个IntentFilter,匹配其中一个即算匹配成功。
- setData()和setType()方法互斥,会相互清除对方设置。如需同时设置,可以使用setDataAndType()。