Activity的启动模式

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信息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值