美文网首页
第一章-第2节Android Activity启动模式

第一章-第2节Android Activity启动模式

作者: Cliper | 来源:发表于2020-04-05 04:32 被阅读0次

    开始学习android的时候就对这个有些难以理解,其实知识点也就那么几点。

    首先Android 有4种启动模式
    分别为:standard,singleTask,singleTop,singleInstance。
    standard模式 :如果在xml中不加任何配置的话,默认是这种模式。

    1. 什么是standard模式?

    第一种情况:比如你现在你从A(Activity) startActivity 跳转到B(Activity),那么B(Activity)会重新走OnCreate,onStart(),onReume方法。
    第二种情况:比如你现在是在A(Activity),startActviity 跳转到A(Activity)
    那么A(Activity)也会重新走OnCreate,onStart(),onReume方法。
    如果现在你按back键,需要2次才会退出A(Activity)。

    其实说了这么多 可以简单的理解为只要是standard模式,startActviity之后 就相当于重新new Activity 然后添加到容器顶部(stack)。
    在栈中的情况如下:


    image.png
    2. 什么是SingleTop模式?

    SingleTop和standard很像。唯一和standard不同的是 如果当前Activity位于栈顶那么 该Activity不会被重新创建 会回调 onNewIntent 方法。

    image.png
    3. 什么是SingleTask模式?

    栈内复用模式,这是一种单例模式。
    如果当前压ABCD,start D , 栈内情况还是ABCD
    如果当前压ABCDE,start D , 栈内情况是ABCED

    第1种情况 AB -> A = BA :


    image.png

    第2种情况 AB - > B = AB:


    image.png
    image.png

    第3种情况 :
    ABC 为同一个任务栈 : AB ->C = ABC
    ABC 为不同任务栈 : AB ->C = AB(stack_S1), C (stack_S2)
    可以给C 配置(TaskAffinity+singleTask)属性那么C就是单独的任务栈,
    注意TaskAffinity 不能 配置为你的包名,不然就木有意义了。因为默认stack配置就是包名。


    image.png
    4. 什么是SingleInstance模式?

    单实例模式。
    加强版的singleTask模式。所有singleTask功能外,唯一区别就是只能独享一个任务栈。而singleTask 只要多个Acivity都配置相同的TaskAffinity,那么他们都在同一个任务栈中。并只有一个实例。

    关于多任务栈有一个(弹栈)场景:
    2个栈的情况
    S1栈 = A(栈底) B
    S2栈 = E(栈底) F

    第一种情况:
    AB -> 启动F后。
    按back键,依次弹出 F E, BA
    第二种情况:
    AB -> 启动E后。
    按back键,依次弹出 E , BA

    总结4个模式之间也很有意思。
    standard + X = singleTop
    SingleTop + Y = singleTask
    singleTask + Z = singleInstance
    X:只要当前启动Activity在栈顶 我就不创建。
    Y:不管当前的Activity在不在栈顶 我都不创建(除非当前栈中没有启动的Activitiy)。
    Z:只要启动 Activity我就创建一个独享的任务栈(只能有一个activity实列)。

    相关文章

      网友评论

          本文标题:第一章-第2节Android Activity启动模式

          本文链接:https://www.haomeiwen.com/subject/orttphtx.html