Activity启动模式及标记位

本文详细介绍了Android中Activity的四种启动模式:standard、singleTask、singleTop和singleInstance,以及常用的启动标记位FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP的用法。每个模式都通过实例解析了其在任务栈中的行为,帮助理解它们如何影响Activity的生命周期和栈管理。
摘要由CSDN通过智能技术生成

Activity启动模式

在说activity启动模式之前,我们要先了解activity栈的概念。activity任务栈是一个“后进先出”的栈结构。即启动一个新activity实例时会将其压入栈顶,当该activity按返回键退出时,其实例会从任务栈中出栈。任务栈分为前台任务栈和后台任务栈,后台任务栈中的activity位于暂停状态,用户可以通过切换将后台任务栈再次调到前台。

activity的启动模式就是配合栈的工作原理,来满足日常的业务需要。activity启动的模式有四种:standard、singleTop、singleTask和singleInstance。standard就是activity默认的启动模式。

standard:标准模式(默认模式)

这种模式下的activity每次启动都会创建一个新的实例,并且不管该实例是否在任务栈内存在都会压栈。如果activityA和activityB都是标准模式,activityA启动了activityB,这时候栈顶是activityB,下面是activityA。

标准模式的activity默认会进入启动它的activity所属的任务栈中,非activity类型的Context若要启动该activity,需要加上标记位FLAG_ACTIVITY_NEW_TASK,即重新为其创建一个新的任务栈。此标志位的启动模式实际上是以singleTask模式启动的。(后续会解释,这里先跳过标记位知识点)

命令行查看栈内activity列表信息

例:在同一APP内且没有标记位情况下,执行跳转activityA——activityB——activityC——activityA,他们都是标准模式。理论上栈内应为ABCA。

命令行执行:

 adb shell dumpsys activity

命令行查询栈信息时里面的信息非常多且杂,这里主要看
ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Display #0 (activities from top to bottom):
该行下面的信息即可,即 Hist #3:—— Hist #2:—— Hist #1:—— Hist #0:,栈内从上到下的的显示顺序,Hist #3位于栈顶。

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Display #0 (activities from top to bottom):
  Stack #1:
    Task id #319
      TaskRecord{
  22fe5578 #319 A=com.jzf.myactivity U=0 sz=4}
      Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.jzf.myactivity/.ActivityA }
        Hist #3: ActivityRecord{38af6616 u0 com.jzf.myactivity/.ActivityA t319}
          Intent { cmp=com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值