美文网首页
Activity的启动模式

Activity的启动模式

作者: 陈萍儿Candy | 来源:发表于2020-11-29 16:39 被阅读0次

    standard,默认模式,每次启动都会新建一个Activity实例,并进入当前任务栈
    singleTop,如果要启动的Activity在栈顶存在实例,则不会重新创建Activity,而是直接使用栈顶的Activity实例,并回调onNewIntent方法。
    singleTask,如果要启动的Activity在栈中存在实例,则不会重新创建Activity,而是直接使用栈里的Activity实例,并回调onNewIntent方法。并且会把这个实例放到栈顶,之前在这个Activity之上的都会被出栈销毁。
    singleInstance,有点单例的感觉,就是所启动的Activity会单独放在一个任务栈里,并且后续所有启动该Activity都会直接用这个实例,同样被重复调用的时候会调用并回调onNewIntent方法。

    Activity依次A→B→C→B,其中B启动模式为singleTask,AC都为standard,生命周期分别怎么调用?如果B启动模式为singleInstance又会怎么调用?B启动模式为singleInstance不变,A→B→C的时候点击两次返回,生命周期如何调用。

    1)A→B→C→B,B启动模式为singleTask

    启动A的过程,生命周期调用是 (A)onCreate→(A)onStart→(A)onResume
    再启动B的过程,生命周期调用是 (A)onPause→(B)onCreate→(B)onStart→(B)onResume→(A)onStop
    B→C的过程同上
    C→B的过程,由于B启动模式为singleTask,所以B会调用onNewIntent,并且将B之上的实例移除,也就是C会被移出栈。所以生命周期调用是 (C)onPause→(B)onNewIntent→(B)onRestart→(B)onStart→(B)onResume→(C)onStop→(C)onDestory

    2)A→B→C→B,B启动模式为singleInstance

    如果B为singleInstance,那么C→B的过程,C就不会被移除,因为B和C不在一个任务栈里面。所以生命周期调用是 (C)onPause→(B)onNewIntent→(B)onRestart→(B)onStart→(B)onResume→(C)onStop

    3)A→B→C,B启动模式为singleInstance,点击两次返回键

    如果B为singleInstance,A→B→C的过程,生命周期还是同前面一样正常调用。但是点击返回的时候,由于AC同任务栈,所以C点击返回,会回到A,再点击返回才回到B。所以生命周期是:(C)onPause→(A)onRestart→(A)onStart→(A)onResume→(C)onStop→(C)onDestory。
    再次点击返回,就会回到B,所以生命周期是:(A)onPause→(B)onRestart→(B)onStart→(B)onResume→(A)onStop→(A)onDestory。

    相关文章

      网友评论

          本文标题:Activity的启动模式

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