activity启动模式

本质上是activity的复用;

standard:无复用;

singleTop:栈顶复用

singleTask:栈内复用;

singleInstance:app复用(单例模式)。

http://www.jianshu.com/p/5f8be91160b4

  • standard
    无需设置,是默认的启动模式。在上述代码的情况下,不管有没有已经存在的实例,都会生成新的实例。但是这种模式并不会使用新的Task。只有按下返回键(即结束当前Activity)才会回到上一个Activity。

  • singleTop:
    在上述代码的情况下,如果当前Task只有一个Activity在其中,那启动Activty时并不产生新的实例,启动的还是当前自身。如果按下返回键就会立即退出程序(因为Task中只有当前这一个Activity)。
    如果当前Task有多个Activity在其中,只有在栈顶的Activity才会重复使用,也就时说如果要启动的Activity并不在栈顶,系统就会创建新的Activity实例并加载到栈顶(此时就与standard模式相同)。

    举个例子:比如说想要Activity的启动顺序是A-B-C-D-D-D,如果D的launcherMode设置为singleTop,那么最终的启动顺序其实是A-B-C-D,也就是重复利用了栈顶的ActivityD。

  • singleTask:
    如果要启动的Activity不存在,则创建新的实例并加到栈顶。
    如果要启动的Activity已经位于栈顶,则与singleTop模式相同。
    如果要启动的Activity已经存在于栈中,则会弹出这个Activty上面的所有其他Activty,使此Activity变为栈顶对象,显示到屏幕前。

    举个例子:比如说想要Activity的启动顺序是A-B-C-D-A,如果A的launcherMode设置为singleTask,那么最终任务栈中只会剩下A,位于A上面的BCD都会被回收。

  • singleInstance:
    首先要要注意的是采用singleInstance模式加载的Activity总是位于栈顶,并且该栈只包含这一个Activity。
    如果要启动的Activity不存在,则首先创建一个新的Task,再创建目标Activity实例,并加入栈顶。
    如果要启动的Activty已经存在,则无论它位于那个应用程序中,无论位于哪个Task中,系统都会把该Activity所在的Task转到前台并显示Acitivty。



文/sunshine2015(简书作者)
原文链接:http://www.jianshu.com/p/5f8be91160b4
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文地址:https://www.cnblogs.com/feng9exe/p/5942988.html