FLAG_ACTIVITY_NEW_TASK: 设置此状态,首先会查找是否存在和被启动的Activity具有相同的亲和性的任务栈(即taskAffinity,注意同一个应用程序中的activity的亲和性一样),如果有,刚直接把这个栈整体移动到前台,并保持栈中的状态不变,即栈中的activity顺序不变,如果没有,则新建一个栈来存放被启动的activity
1. standard 标准的启动模式(默认)
-
如果启动此Activity的Intent中没有设置FLAG_ACTIVITY_NEW_TASK标志, 则这个Activity与启动他的Activity在同一个Task中,
-
如果设置了Activity请参考上面FLAG_ACTIVITY_NEW_TASK的詳細说明,"launchMode"设置为"standard"的
-
Activity可以被实例化多次, 可以在Task中的任何位置, 对于一个新的Intent请求就会实例化一次.
2. singleTop 单一栈顶模式
- 如果启动此Activity的Intent中没有设置FLAG_ACTIVITY_NEW_TASK标志, 则这个Activity与启动他的Activity在同一个Task中,
- 如果设置了Activity请参考上面FLAG_ACTIVITY_NEW_TASK的詳細说明
- "launchMode"设置为"singleTop"的Activity可以被实例化多次, 可以在Task中的任何位置, 对于一个新的Intent请求如果在Task栈顶, 则会用栈顶的Activity响应Intent请求,而不会重新实例化对象接收请求, 如果没有在栈顶, 则会实例化一个新的对象接收Intent请求.
3. singleTask 单一任务栈模式
"launchMode"设置为"singleTask"的Activity只能被实例化一次, 它允许其它Activity压入"singleTask"的Activity
所在的Task栈,如果有新的Intent请求有此标志的Activity, 则系统会清除有此标志的Task栈中的全部Activity,并把此Activity显示出来.
4. singleInstance 单一实例模式
launchMode"设置为"singleInstance"的Activity总是在栈底, 只能被实例化一次, 不允许其它的Activity压入"singleInstance"的Activity所在Task栈, 即整个Task栈中只能有这么一个Activity.
除了系统级别的一些应用程序会用,其他的应用程序很少用.
如果某个activity 要显示的界面在整个手机中 只有一个 的话,那么 这个activity就会设置成singleInstance
参考链接:https://www.cnblogs.com/xiaoQLu/archive/2012/07/17/2595294.html
网友评论