当前位置: 首页 > news >正文

Android 验证启动模式

文章目录

  • Android 验证启动模式
    • 查看任务栈
    • launchMode
      • standard
      • singleTop
      • singleTask
      • singleInstance
    • Intent标记
      • FLAG_ACTIVITY_NEW_TASK
      • FLAG_ACTIVITY_CLEAR_TASK 和 FLAG_ACTIVITY_NEW_TASK
      • FLAG_ACTIVITY_CLEAR_TOP
      • FLAG_ACTIVITY_SINGLE_TOP

Android 验证启动模式

查看任务栈

可以通过 adb shell dumpsys activity activities 命令查看 Activity 任务栈。

launchMode

standard

OneActivty -> TwoActivity -> ThreeActivity -> ThreeActivity

栈信息:

* Task{347a4b3 #124 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=4}
bounds=[0,0][1080,2400]* ActivityRecord{75681b9 u0 com.example.demo/.ThreeActivity t124}* ActivityRecord{156b287 u0 com.example.demo/.ThreeActivity t124}* ActivityRecord{2982324 u0 com.example.demo/.TwoActivity t124}* ActivityRecord{f21da70 u0 com.example.demo/.OneActivity t124}

singleTop

将 ThreeActivity 设置为 singleTop。

依次启动:OneActivty -> TwoActivity -> ThreeActivity -> ThreeActivity

栈信息:

* Task{5241c10 #154 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=3}bounds=[0,0][1080,2400]* ActivityRecord{d70d694 u0 com.example.demo/.ThreeActivity t154}* ActivityRecord{9c92c1f u0 com.example.demo/.TwoActivity t154}* ActivityRecord{54d0309 u0 com.example.demo/.OneActivity t154}

singleTask

将 TwoActivity 设置为 singleTask。

依次启动:OneActivty -> TwoActivity -> ThreeActivity -> TwoActivity

栈信息:

* Task{ec23885 #174 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=2}
bounds=[0,0][1080,2400]* ActivityRecord{f6f60c7 u0 com.example.demo/.TwoActivity t174}* ActivityRecord{1c8c6da u0 com.example.demo/.OneActivity t174}

singleInstance

将 ThreeActivity 设置为 singleInstance。

依次启动:OneActivty -> TwoActivity -> ThreeActivity -> ThreeActivity

栈信息:

* Task{628a158 #176 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=1}
bounds=[0,0][1080,2400]* ActivityRecord{285b2b1 u0 com.example.demo/.ThreeActivity t176}
* Task{ce196c3 #175 type=standard A=10289:com.example.demo U=0 visible=false mode=fullscreen translucent=true sz=2}
bounds=[0,0][1080,2400]* ActivityRecord{2a72e67 u0 com.example.demo/.TwoActivity t175}* ActivityRecord{b04408e u0 com.example.demo/.OneActivity t175}

Intent标记

FLAG_ACTIVITY_NEW_TASK

启动 ThreeeActivity 时添加该标记。

依次启动:OneActivty -> TwoActivity -> ThreeActivity -> ThreeActivity

栈信息:

* Task{93cafdd #142 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=4}
bounds=[0,0][1080,2400]* ActivityRecord{9233d38 u0 com.example.demo/.ThreeActivity t142}* ActivityRecord{7a45878 u0 com.example.demo/.ThreeActivity t142}* ActivityRecord{b0bb4ce u0 com.example.demo/.TwoActivity t142}* ActivityRecord{3652a23 u0 com.example.demo/.OneActivity t142}

在Manifest.xml文件中,给ThreeActivity添加 taskAffinity="www.baidu.com" 属性,并依次启动:OneActivty -> TwoActivity -> ThreeActivity -> ThreeActivity

栈信息:

* Task{919184b #144 type=standard A=10289:www.baidu.com U=0 visible=true mode=fullscreen translucent=false sz=1}
bounds=[0,0][1080,2400]* ActivityRecord{a186228 u0 com.example.demo/.ThreeActivity t144}
* Task{6b64d39 #143 type=standard A=10289:com.example.demo U=0 visible=false mode=fullscreen translucent=true sz=2}
bounds=[0,0][1080,2400]* ActivityRecord{b15b5da u0 com.example.demo/.TwoActivity t143}* ActivityRecord{a3c6f7e u0 com.example.demo/.OneActivity t143}

总结:

如果没有设置 taskAffinity 属性,表现形式和standard模式一样;如果设置了 taskAffinity 属性,会在一个新的任务栈中启动一个Activity。

FLAG_ACTIVITY_CLEAR_TASK 和 FLAG_ACTIVITY_NEW_TASK

依次启动:OneActivty -> TwoActivity -> ThreeActivity

栈信息:

* Task{ff9bb3d #173 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=3}
bounds=[0,0][1080,2400]* ActivityRecord{52b8327 u0 com.example.demo/.ThreeActivity t173}* ActivityRecord{7866df1 u0 com.example.demo/.TwoActivity t173}* ActivityRecord{28f7f32 u0 com.example.demo/.OneActivity t173}

再启动 -> ThreeActivity(添加该属性)

栈信息:

* Task{ff9bb3d #173 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=1}
bounds=[0,0][1080,2400]* ActivityRecord{4903a43 u0 com.example.demo/.ThreeActivity t173}

总结:

会清空任务栈中的Acitivity实例,并启动新的Activity实例。

FLAG_ACTIVITY_CLEAR_TOP

场景一:TwoActivity设置为standard

依次启动:OneActivty -> TwoActivity -> ThreeActivity

栈信息:

* Task{42187d #165 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=3}
bounds=[0,0][1080,2400]* ActivityRecord{b4ffb82 u0 com.example.demo/.ThreeActivity t165}* ActivityRecord{20a3e02 u0 com.example.demo/.TwoActivity t165}* ActivityRecord{4c44440 u0 com.example.demo/.OneActivity t165}

再启动-> TwoActivity(设置该属性)

栈信息:

* Task{42187d #165 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=2}
bounds=[0,0][1080,2400]* ActivityRecord{22e57ea u0 com.example.demo/.TwoActivity t165}* ActivityRecord{4c44440 u0 com.example.demo/.OneActivity t165}

场景二:TwoActivity设置为singleTop

依次启动:OneActivty -> TwoActivity -> ThreeActivity

栈信息:

* Task{3cb644c #166 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=3}
bounds=[0,0][1080,2400]* ActivityRecord{4fce6bb u0 com.example.demo/.ThreeActivity t166}* ActivityRecord{c88c13d u0 com.example.demo/.TwoActivity t166}* ActivityRecord{4f10c95 u0 com.example.demo/.OneActivity t166}

再启动-> TwoActivity(设置该属性)

栈信息:

* Task{3cb644c #166 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=2}
bounds=[0,0][1080,2400]* ActivityRecord{c88c13d u0 com.example.demo/.TwoActivity t166}* ActivityRecord{4f10c95 u0 com.example.demo/.OneActivity t166}

总结:

如果Activity的启动模式设置为standard,该Activity会被重新创建,并且上方的Activity都会被清除;如果启动模式设置为singleTop,则该Activity不会被重建,上方的Activity会被清除。

FLAG_ACTIVITY_SINGLE_TOP

启动 TwoActivity 时添加该标记。

依次启动:OneActivty -> TwoActivity -> TwoActivity

栈信息:

* Task{5566fe4 #172 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=2}
bounds=[0,0][1080,2400]* ActivityRecord{cddc22b u0 com.example.demo/.TwoActivity t172}* ActivityRecord{a3d4c4d u0 com.example.demo/.OneActivity t172}

总结:

和 singleTop 的效果一样。

相关文章:

  • 幻兽帕鲁专用服务器搭建之Linux部署配置教程
  • SpringBoot+Vue全栈开发-刘老师教编程(b站)(一)
  • [CSS]文字旁边的竖线以及布局知识
  • 设计模式:软件工程的艺术
  • BOOT电路
  • 【4.3计算机网络】网络规划与设计
  • QT C++实践|超详细数据库的连接和增删改查操作|附源码
  • 【k8s配置与存储--持久化存储(HostPath、EmptyDir、NFS)】
  • 【查漏补缺你的Vue基础】Vue数据监听深度解析
  • SQL函数学习记录
  • mac m3安装nvm安装说明;mac安装xbrew
  • 【机器人最短路径规划问题(栅格地图)】基于遗传算法求解
  • 【GB28181】wvp-GB28181-pro快速修改登录页面名称(前端)
  • 拉美巴西阿根廷媒体宣发稿墨西哥哥伦比亚新闻营销如何助推跨境出海推广?
  • springboot/ssm学院个人信息管理系统Java高校课程作业管理系统web
  • .pyc 想到的一些问题
  • 《剑指offer》分解让复杂问题更简单
  • JavaScript新鲜事·第5期
  • Mybatis初体验
  • Mysql优化
  • PHP面试之三:MySQL数据库
  • React系列之 Redux 架构模式
  • SQLServer插入数据
  • Yii源码解读-服务定位器(Service Locator)
  • 安装python包到指定虚拟环境
  • 初识 webpack
  • 工程优化暨babel升级小记
  • 构建工具 - 收藏集 - 掘金
  • 关于使用markdown的方法(引自CSDN教程)
  • 回顾2016
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 前端之React实战:创建跨平台的项目架构
  • 如何合理的规划jvm性能调优
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 译自由幺半群
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #define、const、typedef的差别
  • $GOPATH/go.mod exists but should not goland
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (论文阅读11/100)Fast R-CNN
  • (新)网络工程师考点串讲与真题详解
  • (一)插入排序
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .net mvc 获取url中controller和action
  • .Net Web窗口页属性
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .Net6 Api Swagger配置