当前位置:   article > 正文

Activity的启动模式_如果一个activity的启动模式为singletop,并且任务栈中已经存在该实例,如果再次打

如果一个activity的启动模式为singletop,并且任务栈中已经存在该实例,如果再次打

Activity有四种启动模式:standard、singleTop、singleTask、singleInstance

  • standard标准模式:
    standard模式是系统的默认模式,每次启动一个Activity都会创建一个新的实例,不管实例是否已经存在。每创建一个实例,都会执行一遍Activity的onCreate()、onStart()、onResume()方法。
    一个任务栈可以有多个实例,每个实例也可以属于不同的任务栈。
    谁启动了这个Activity,就会存在于谁的任务栈中。
  • singleTop栈顶复用模式:
    如果新的Activity已经位于任务栈的栈顶,重新启动该Activity时,不会被重新创建,即onCreate()、onStart()方法不会调用,会回调onNewIntent()方法,通过onNewIntent()的参数,可以获得当前请求的信息。如果该Activity不是位于栈顶,仍然会重新创建。
  • singleTask栈内复用模式:
    是一种单实例模式,只要启动的Activity在栈中,就不会再创建实例,同样会调用onNewIntent()方法。对于启动模式为singleTask的Activity,在启动时,回先去寻找其所在的任务栈,如果存在,则判断栈内是否存在该实例,如果实例存在,在会调用onNewIntent()方法,如果不存在,则创建实例并放入栈中。如果栈和实例均不存在,则会创建新的栈和实例。
    如果任务栈中存在实例,再次启动时,需要将其放到栈顶,同时会把其上面的Activity出栈。
  • singleInstance单实例模式
    它是加强版的singleTask模式,具有所有singleTask的特点,并且加强了一点,singleInstance模式的Activity只能单独的存在于一个任务栈中。

什么叫Activity相关的任务栈?
涉及到一个参数TaskAffinity,标识了一个Activity所需的任务栈的名字,默认情况下,均为应用的包名。我们可以指定TaskAffinity属性值,但是必须与所在包名不同,否则,没有效果。
一般TaskAffinity与singleTask 或 allowTaskRePartenting 属性配对使用。

adb命令,抓取Activity
adb shell dumpsys activity
可根据 Run Activity(most recent first)中查看任务栈及Activity信息。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/程序代码艺术家/article/detail/60705
推荐阅读
相关标签
  

闽ICP备14008679号