Activity启动模式

Back Stack(回退栈) 包含多个Task任务栈–> Task任务栈是Activity的集合
  1. Standard: 标准模式,系统模式模式
    每次启动一个Activity都会创建一个新的实例,不管这个实例是否已经存在.
    新的实例运行在创建他的activity所在的栈中.
    注意:使用Application去启动startard模式的activity时会报错,因为非Actvity类型的context没有所谓的任务栈,解决方案:添加FLAG_ACTIVITY_NEW_TASK标记位,创建一个新的任务栈
  2. SingleTop:栈顶复用模式
    待启动的Activity已经存在并位于任务栈的栈顶,那么此activity不会重新创建,而是调用onNewIntent()方法.
    如果新启动的activity没有位于栈顶,那么新的activity还是会重新创建
  3. SingleTask:栈内复用模式
    单实例模式,只要activity在一个栈中存在,那么再次启动该activity也不会重新创建实例,会执行onNewIntent方法,并将该activity上面所有实例出栈.
    通过taskAffinity属性可指定待启动Activity的任务栈.
    • 栈S1中情况是 ABC,这时候C启动D(singleTask模式),并且 D所需的任务栈是S2,由于S2和D的实例都不存在,所以系统需要先创建任务栈S2,然后再创建D的实例并将其压入S2栈中;
    • 如果D所需的任务栈是S1,D在S1中也没有实例,那么直接创建D实例执行所有生命周期并入栈,
    • 如果D所需的任务栈是S1,并且当前任务栈S1中情况是ADBC,此时以singleTask模式启动D,系统会把D切换掉栈顶并调用其onNewIntent方法,同时singleTask默认有clearTop属性,会导致栈内D上面的activity全部出栈,这时候S1中最终情况是AD.
  4. SingleInstance:单实例模式,
    运行于独立的任务栈中,并且任务栈中只有他一个实例存在
    栈1中有activity A,启动具有singleInstance模式的activity B ,那么启动后情况是栈1:A ,栈2:B。
    再次启动B,执行activityB的onNewIntent方法,启动后情况是栈1:A ,栈2:B。
    不同的应用去打开这个Activity共享同一个Activity.
    • 通过设置Intent的Flag:
      FLAG_ACTIVITY_NEW_TASK: 在新的任务栈中启动Activity –>Service启动Activity.
      查看堆栈 shell dumpsys activity
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值