安卓启动模式的笔记

本文详细介绍了Android中Activity的四种启动模式:standard标准模式、singleTop栈顶复用模式、singleTask栈内复用模式及singleInstance单实例模式。通过具体实例解释了每种模式下Activity如何在任务栈中工作,帮助开发者更好地理解和使用这些模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

四种启动模式

  1. standard 标准模式,也是activity的默认启动模式
    使用这种启动模式的activity 不会理会其所在的任务栈中是否已经有了实例,总会创建一个新实例放入栈中,这个很好理解;
  2. singleTop 栈顶复用模式
    这个可以帮助性的理解为singleInTop, 意即栈顶只有一个实例,那也就是说如果不在栈顶,就会创建新实例放入栈中;
    当有一个实例处于栈顶的时候,就会调用onNewIntent ,而不会调用onCreateonStart, 然后调用onResume ,即跳过前两个生命周期函数;
    举个例子,1.栈中此时为ABC,栈顶为C,此时启动C活动,如果C的启动模式是singleTop ,那么启动后,栈中仍为ABC;2. 栈中此时为ACB,栈顶为B,如果C的启动模式是singleTop ,启动C活动后,栈的内容就会变成ACBC;3. 栈中此时为ABC,栈顶为C,此时启动C活动,如果C的启动模式不是singleTop ,而是standard ,那么启动后,栈中为ABCC;
  3. singleTask 栈内复用模式
    同样,可以帮助性的理解为singleInTask ,设置为这种启动模式的avtivity 只要在栈中存在,无论是不是在栈顶,都不会再创建,而是会把实例移到栈顶来,但是这是栈,没法直接交换栈内数据,所以只能进行清顶 ,即把这个实例上面的所有活动都弹出栈,这样这个实例就成为栈顶了;当然,如果这个活动不存在,那么就正常的创建然后入栈;如果活动需要的栈不存在(栈的名字与这个活动的taskAffinity 的值相同,默认的栈名是包名),那么就新创建一个栈,然后创建实例,最后入这个新的栈;
  4. singleInstance 单实例模式
    这种启动模式除了具有singleTask 的所有特性(栈内复用、清顶,新建栈等)外,还限制了设置这种启动模式的活动只能单独存在一个任务栈中,后续也不会再创建这个活动的实例;这种情况下,按下back键的时候会先清除一个栈,然后再清除另一个栈,并没有按照调用顺序的反序来出栈。
    另,个人认为:
    假如A活动启动B活动,那么B活动在正常情况下是会进入A活动的任务栈的,
    除非1.指定B活动的taskAffinity 与A的taskAffinity 不同,那么AB活动的栈名就不会一样,B也就不会进入A的栈中了;或者2. B的启动模式为singleInstance, B也不会进入A的任务栈。

参考任玉刚大神的开发艺术探索,以上如有错误,敬请指正,不胜感激!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值