天天看点

聊聊Android的四种启动模式聊聊Android的四种启动模式1,四种启动模式2,启动模式的实现方式:3,启动模式的实际应用场景总结:

聊聊Android的四种启动模式

在说启动模式前先说一些名词:
           

栈的概念

栈(Stack)是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西,而对于栈就只能每次访问它的栈顶元素,从而可以达到保护栈顶元素以下的其他元素.”先进后出”或”后进先出”就是栈的一大特点,先进入栈的元素总是要等到后进入栈的元素出栈以后才能出栈.递归就是利用到了系统栈,暂时保存临时结果,对临时结果进行保护.

栈的基本操作:压栈、弹栈

任务栈的概念

Task简单的说就是一组以栈的模式聚集在一起的Activity组件集合,类似于一个填充了Activity的容器,最先加入的Activity会处于容器最下面,最后加入的处于容器最上面,而从Task中取出Activity时是从最顶端先取出,最后取出的是最开始添加Activity,这就是后进先出模式,而Activity在Task中的顺序是可以控制的,在Activity跳转时用到Intent Flag可以设置新建activity的创建方式。
           

1,四种启动模式

1,standard   默认的启动模式
    2,singleTop  需要创建的Activity已经处于任务栈中时,复用此Activity
    3, singleTask 需要创建的Activity已经处于任务栈中时,弹出此Activity上的其他Activity ,让其处于栈顶。
    4,singleInstance 全局单例模式,只要整个系统中创建此Activity的实例,不再创建。
           

2,启动模式的实现方式:

1,设置Activity的启动模式,只需要在AndroidManifest.xml里对应的<activity>标签设置Android:launchMode属性
    2, 通过设置FLAG
        `Intent intent = new Intent(context, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.startActivity(intent);`
           

3,启动模式的实际应用场景

此时有A B C 三个Activity
    1,如果A,B,C,都是standard的启动模式   
        1)先启动A ,再启动B  ,然后启动C  这个时候任务栈里是 A->B->C  .C位于栈顶。
        2)此时再启动B ,任务栈里是 A->B->C->B  他们会依次累加
    2,如果A ,B,D是standard模式,C是singleTop模式
        第一种情况
        1)先启动A ,再启动B  ,然后启动C  这个时候任务栈里是 A->B->C  .C位于栈顶。
        2)如果此时再启动C,任务栈里是A->B->C  ,但是会调用C 的onNewIntent()方法。

        第二种情况
        1)先启动A ,再启动B  ,然后启动C ,再启动D, 这个时候任务栈里是 A->B->C->D  . D位于栈顶。
        2)如果此时再启动C,任务栈里是A->B->C->D->C

        (这就是说,只有C在栈顶的时候,再次启动C 的时候,他的SingleTop才有效果,否则,它跟 默认的启动模式没什么区别。)
    3,如果A,B,D是standard模式,C是singleTast模式
        1)先启动A ,再启动B  ,然后启动C ,再启动D, 这个时候任务栈里是 A->B->C->D  . D位于栈顶。
        2)如果此时再次启动C,任务栈里面是A->B->C  
        singleTask在同一个任务栈里只允许有一个实例。因为在任务栈里已经有了他的实例,他会把她之上的Activity  onDestroy()掉,让自己处于栈顶
    4,singleInstance  
        只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
           

总结:

四种启动模式其实很简单,需要消化的就是singleTop 和singleTask的区别。
    你只要记住两句话:
    1,singleTop 是只有在栈顶的时候才复用
    2,singleTask 是在栈内才复用   这四种启动模式就算掌握了