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. python 下载大文件
  2. php聊天程序后端,php写后端运作程序总结
  3. SwiftSuspenders 1.6-深入浅出1
  4. REST API 基于ACCESS TOKEN 的权限解决方案
  5. 9个妙招增强家庭WIFI信号
  6. 数据库选项--ALTER DATABASE WITH 选项
  7. java中的堆、栈、方法区等比较
  8. 删除android系统自带的第三方软件
  9. [golang]nil slice和empty slice的区别
  10. 零基础 Amazon Web Services (AWS) 入门教程图文版(三)
  11. c++报错:引用了未定义标签_大牛带你解读Spring源码,编写自定义标签,您能学会吗?...
  12. 【原创】中文分词系统 ICTCLAS2015 的JAVA封装和多线程执行(附代码)
  13. 从一个程序看继承的有关细节及规则(学习马士兵视频的总结)
  14. Atitit 模板引擎总结 v4 saa 目录 1. 模板引擎 1 1.1. 构成渲染引擎+指令系统 1 1.2. 模板语法mustache语法 es6 el语法 1 2. 常见模板步骤 1 2.
  15. 用友NC安装教程、用友NC65安装教程、用友NC57安装教程、NC安装教程、NC65授权教程
  16. 苹果id是什么格式的_长春苹果x主板维修推荐,苹果ipad12.9死机,商业资讯
  17. Buuctf --hellow world
  18. 高数 | 洛必达法则的隐藏细节、广义洛必达法则(分母无穷直接洛必达)使用条件
  19. 【BZOJ1503】郁闷的出纳员
  20. 【PS插件】Retouch4me 10合1一键安装版

热门文章

  1. iOS xcode9中framework静态库的创建以及xib和图片的使用记录
  2. 永远的谭嗣同--2005年四川高考满分作文
  3. RS推荐系统-关联规则-Apriori
  4. 永信至诚发起亿元创投基金 助力网络安全创业者成长
  5. 一级造价工程师(安装)- 计量笔记 - 第四章第二节热力设备工程
  6. 《32天SQL筑基》导读
  7. 点亮LED灯(STC89C52RC芯片)
  8. Linux查看各种解压文件
  9. linux下获取文件大小
  10. 164. Maximum Gap 1