blow your mind

bym系列意在除开技术分享,还分享下思路,不止是做一个代码的搬运工。

背景介绍

最近在阅读《Android开发艺术探索》,书是2015年出的,但是内容却对我来说是新的。在1.2 Activity的启动模式一章中有这么一段话。

TaskAffinity,可以翻译为任务相关性。这个参数标识了一个Activity所需要的任务栈的名字,默认情况下,所有Activity所需的任务栈的名字为应用的包名。当然,我们可以为每个Activity都单独指定TaskAffinity属性,这个属性值必须不能和包名相同,否则就相当于没有指定。TaskAffinity属性主要和singleTask启动模式或者allowTaskReparenting属性配对使用,在其他情况下没有意义。另外,任务栈分为前台任务栈和后台任务栈,后台任务栈中的Activity位于暂停状态,用户可以通过切换将后台任务栈再次调到前台。

前台任务栈和后台任务栈

首先官方并没有定义这两个概念,笔者应该是方便理解自行定义的。我们可以做如下理解

  • 前台任务栈:当前处于前台并运行、可见并能和用户交互的APP应用所在的栈。
  • 后台任务栈:当前处于后台、不可见也不能和用户交互的APP应用所在的栈。

当TaskAffinity和singleTask启动模式配对使用的时候,它是具有该模式的Activity的目前任务栈的名字,待启动的Activity会运行在名字和TaskAffinity相同的任务栈中。

TaskAffinity+singleTask

创建一个默认启动模式的KtActivity和一个SingleTask加上android:taskAffinity="com.markfrain.singleTask"的SingleTaskActivity。
接口我们先启动KtActivity,从KtActivity中启动single

Running activities (most recent first):TaskRecord{b85f8b6 #2082 A=com.bimfoo.tools.demo U=0 StackId=1981 sz=1}Run #0: ActivityRecord{fcca610 u0 com.bimfoo.tools.demo/.ui.KtActivity t2082}mResumedActivity: ActivityRecord{fcca610 u0 com.bimfoo.tools.demo/.ui.KtActivity t2082}
Running activities (most recent first):TaskRecord{c9689b7 #2081 A=com.markfrain.singleTask U=0 StackId=1980 sz=1}Run #0: ActivityRecord{a3a31cb u0 com.bimfoo.tools.demo/.ui.SingleTaskActivity t2081}

问题出现了,并没有像文字描述那样KtActivity在与SingleTaskActivity在一个任务栈中。
或许文字的意思只是单指SingleTaskActivity会在taskAffinity字段指定的任务栈中?如果是这样那就没错了。

好的接下来看第二段

当TaskAffinity和allowTaskReparenting结合的时候,这种情况比较复杂,会产生特殊的效果。当一个应用A启动了应用B的某个Activity后,如果这个Activity的allowTaskReparenting属性为true的话,那么当应用B被启动后,此Activity会直接从应用A的任务栈转移到应用B的任务栈中。这还是很抽象,再具体点,比如现在有2个应用A和B, A启动了B的一个Activity C,然后按Home键回到桌面,然后再单击B的桌面图标,这个时候并不是启动了B的主Activity,而是重新显示了已经被应用A启动的Activity C,或者说,C从A的任务栈转移到了B的任务栈中。可以这么理解,由于A启动了C,这个时候C只能运行在A的任务栈中,但是C属于B应用,正常情况下,它的TaskAffinity值肯定不可能和A的任务栈相同(因为包名不同)。所以,当B被启动后,B会创建自己的任务栈,这个时候系统发现C原本所想要的任务栈已经被创建了,所以就把C从A的任务栈中转移过来了。

TaskAffinity和allowTaskReparenting

根据上面的文字描述, 让我想起了最近玩的淘宝的芭芭农场

《BYM》常见App中TaskAffinity的使用小记相关推荐

  1. 常见的图片比例有哪些?App中不同图片比例适用场景

    在现代化的今天,图片在app中随处可见.我们通常只关心图片的内容而没有想过图片的比例其实也有一定讲究.目前常见的图片比例有1:1.2:3.4:3.16:9,为什么不同app中需要用到这些不同的图片比例 ...

  2. 移动App中常见的Web漏洞

    本文转自:http://www.dickeye.com/?id=16 主要是手机APP漏洞 放在web端测试 学习了 智能手机的存在让网民的生活从PC端开始往移动端转向,现在网民的日常生活需求基本上一 ...

  3. 网页与APP中那些优美的登陆表单

    我从Dribbble收集了20个漂亮的登陆表单案例.希望你看后能从中受益,并对你以后的登陆表单设计有帮助.设计一个登陆表单是非常容易,但大多设计都很糟糕.毫无亮点.无论如何,这篇Dribbble案例集 ...

  4. 客户端相关知识学习(一)之混合开发,为什么要在App中使用H5页面以及应用场景、注意事项...

    混合开发 随着移动互联网的高速发展,常规的开发速度已经渐渐不能满足市场需求.原生H5混合开发应运而生,目前,市场上许多主流应用都有用到混合开发,例如支付宝.美团等.下面,结合我本人的开发经验,简单谈一 ...

  5. android tv 开发布局,Android TV开发总结(七)构建一个TV app中的剧集列表控件

    前言:剧集类控件,在TV app中非常常见,今天将介绍构建一个TV app中的剧集列表控件,此控件上传到我的Github:https://github.com/hejunlin2013/Episode ...

  6. android fragment界面滑动切换效果,Android App中使用ViewPager+Fragment实现滑动切换效果...

    在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,如果采用ViewPager,代码就会短很多,但是使用ViewPager也有弊端:需要导入android- ...

  7. Android Studio 实现将视频资源嵌入APP中

    Android Studio 实现将视频资源嵌入APP中 (直取思路跟代码跳转文末,如有帮助勿忘分享点赞奥!你的支持是我更新的动力!) 在正文之前首先想给大家引入安卓数据存储路径: 内部存储inter ...

  8. 常见APP攻击方法 以及防御方法介绍(移动安全)

    一.常见APP攻击风险以及防御方法介绍 二.APP攻击以及防御方法 案例讲解 1.基于组件攻击 - 应用劫持 用户打开安卓手机上的某一应用,这时,恶意软件侦测到用户的这一动作,如果立即弹出一个与该应用 ...

  9. 如何将AI模型集成到android应用(app)中

    在Android中集成AI模型(Tensorflow,caffe,coreml) 该开发指南可以指导Android手机应用开发者将常见深度学习框架(Caffe.Tensorflow.Coreml.Pa ...

最新文章

  1. 软考自查:计算机网络
  2. 万字长文的Redis五种数据结构详解(理论+实战),建议收藏。
  3. 20172328 2018-2019《Java软件结构与数据结构》第八周学习总结
  4. SAP UI5 应用开发教程之二十七 - SAP UI5 应用的单元测试工具 QUnit 介绍
  5. intp适合学计算机吗,⑨MBTI测试,分析INTP型人格的专业选择和职业选择
  6. linux php任务计划,linux系统怎么添加计划任务执行php文件
  7. 计算机关机键消失了,如何解决Windows7电脑中的关机键不见了
  8. redis4数据类型.更新HyperLogLog类型
  9. QOS 原理阶段学习总结
  10. 运筹学——表上作业法
  11. 编码器控制电机正反转梯形图_旋转编码器如何控制电机正反转?PLC如何实现?
  12. Linux进程管理(redhat 8.0)
  13. URP管线下使用Dither做像素化风格
  14. kaggle phone verify 收不到手机验证码(2021.06亲测可行)
  15. ccf 行车路线 201712-4
  16. 运算符:is与==的区别
  17. 大道至简(读后感)第一章 编程的精义
  18. cs231n学习笔记——图像分类
  19. 龚胤全云栖大会_2018杭州云栖大会-大会嘉宾
  20. 练习_2021-01-09

热门文章

  1. 浮点数floats的的整数除法和运算结果不精确
  2. 创业公司CEO与技术大拿必读:CEO与大拿之间的距离
  3. 大数据复试面试总结(二)前沿技术相关
  4. ssoj1338蜘蛛侠 trampolin
  5. 健康管理系统3.0(微信小程序 + JQuery + html + 爬虫 + MySQL + spring boot 只用于学习,不可商用)
  6. 杨百万建议:炒股操作
  7. 尚硅谷在线教育十四:微信支付
  8. 静态时序分析-建立时间和保持时间违例分析
  9. npm命令安装element-ui报错
  10. 相变材料二氧化钒薄膜制备总结