一、Activity 的launchMode(运行模式)共有4种,分别是:standard,singleTop,singleTask, singleInstance
1 、standard:(备注:standard是系统默认的启动模式。)
标准启动模式,每次激活Activity 时都会创建Activity,并放入任务栈中。如果启动此Activity的Intent中没有设置FLAG_ACTIVITY_NEW_TASK标志,则这个Activity与启动他的Activity在同一个Task中,如果设置了Activity请参考上面FLAG_ACTIVITY_NEW_TASK的详细说明,“launchMode”设置为"standard"的Activity可以被实例化多次,可以在Task中的任何位置,对于一个新的Intent请求就会实例化一次.
2 、singleTop:
如果在任务的栈顶正好存在该Activity 的实例,就重用该实例,而不会创建新的Activity 对象,不过它会调用onNewIntent()方法。如果栈顶部不存在就会创建新的实例并放入栈顶(即使栈中已经存在该Activity 实例,只要不在栈顶,都会创建实例)。如果启动此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:
如果在栈中已经有该Activity 的实例,就重用该实例(会调用实例的onNewIntent ())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。和s ingleTop在名字上即可看出区别,即s ingleTop每次只检测当前栈顶的activity是否是我们需要请求创建的,而singleTask则会检测栈中全部的Activity 对象,从上向下,如果检测到是我们所请求的则会消灭此Activity 对象上面的对象,直接把检测到的我们需要的Activity 置为栈顶。“launchMode”设置为" singleTask"的Activity总是在栈底,只能被实例化一次,它允许其它Activity压入"singleTask"的Activity 所在的Task栈,如果有新的Intent请求有此标志的Activity ,则系统会清除有此标志的Task栈中的全部Activity,并把此Activity显示出来.
4 、singleInstance:
在一个新栈中创建该Activity 实例,并让多个应用共享该Activity 实例。一旦这种模式的Activity实例存在于某个栈中,任何应用再激活这个Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。此启动模式和我们使用的浏览器工作原理类似,在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。此模式会节省大量的系统资源,因为他能保证要请求的Activity对象在当前的栈中只存在一个。“launchMode”设置为”singleInstance”的Activity总是在栈底,只能被实例化一次,不允许其它的Activity压入”singleInstance”的Activity 所在Task栈,即整个Task栈中只能有这么一个Activity .
转载于:https://blog.51cto.com/zzhhz/1633344