对Activity启动模式的理解
2024-09-06 09:15:44
对Activity启动模式的理解
- 应用场景
- 在已打开多个Activity应用B的前提下,应用A调用应用B后点击返回按钮,需要直接返回到A应用,而不是打开B应用的上一个Activity
一个Task可以理解为一个Activity栈,可以装载一个或多个Activity,回退和打开的顺序逻辑和基本的数据结构栈是一致的。
一个Application如果有N个Activity,这些Activity分布在M个任务栈中,那么Application的回退栈会遵循这样的原则:
- 首先从当前Activity在的Task回退,直到这个Task中再无记录
- 寻找下一个Task再次退回直到没有Activity
- 这个Task是在Application的总栈中有记载的,总是Task中最近使用的Activity相关
对SingleTask的理解
- 该启动模式建议和TaskAffinity一起使用,这样才能发挥这种加载模式的特殊逻辑效果。
- 当一个应用程序加载一个singleTask模式的Activity时,首先该Activity会检查是否存在与它的taskAffinity相同的Task。
- 如果存在,那么检查是否实例化,如果已经实例化,那么销毁在Activity以上的Activity并调用onNewIntent。如果没有实例化,那么该Activity实例化并入栈
- 如果不存在,那么就重新创建Task,并入栈
对SingleInstance的理解
- 当一个应用程序加载一个singleInstance模式的Activity时,如果该Activity没有被实例化,那么就重新创建一个Task,并入栈。如果已经被实例化,那么就调用该Activity的onNewIntent
- singleInstance的Activity所在的Task不允许存在其他Activity,任何从该Activity加载的其他Activity(比如Activity2)都会被放入其他的Task中,如果存在与Activity2相同的affinity的Task,则在该Task内创建Activity2.如果不存在,则重新生成新的Task并入栈
以上这些学习都是因为最近在做一个微信调起客户端的事情。如果自己的客户端处于运行状态,按下Home键后台挂起。此时如果使用微信调起自己的客户端某个页面,不做任何处理的情况下,按下回退或者当前Activity.finish(),页面都会停留在自己的客户端(因为自己的Application回退栈不为空),这明显不符合逻辑的。产品的要求是,回退必须回到微信客户端,而且要保证不杀死自己的Application.我的处理方案就是,设置当前被调起Activity的属性为:
LaunchMode=""SingleTask"
taskAffinity="com.tencent.mm"(com.tencent.mm是借助于工具找到的微信包名),就是把自己的Activity放到微信默认的Task栈里面,这样回退时就会遵循“Task只要有Activity一定从本Task剩余Activity回退"的原则,不会回到自己的客户端;而且也不会影响自己客户端本来的Activity和Task逻辑。
学习资料
最新文章
- python之最强王者(2)——python基础语法
- CCF 201512-4 送货(错误)
- ZOJ Problem Set - 1109 Language of FatMouse
- Python学习 过程中零散知识点的总结
- l中断的实现
- Splay!
- 通过CSS让html网页中的内容不可选
- Spring-----Spring整合Struts2实例
- 【 bzoj4537】HNOI2016 最小公倍数
- Ubuntu 挂载硬盘分区
- excel下拉级联的做法
- tkinter第三章(单选和多选)RadioButton CheckButton
- 西邮linux兴趣小组2014纳新免试题(三)
- 可空类型 Nullable<;T>;
- springboot+cloud 学习(五)统一配置中心 spring cloud config + cloud bus + WebHooks +RibbitMQ
- win7中调试Hotspot
- C语言扫盲篇
- JAVAEE——宜立方商城11:sso登录注册功能实现、通过token获得用户信息、Ajax跨域请求(jsonp)
- SQL创建视图
- iOS 绘制一个表盘时钟,秒针效果可以“扫秒/游走”
热门文章
- HTML5新特性 websocket(重点)--多对多聊天室
- 201771010128王玉兰《面向对象程序设计(Java)》第八周学习总结
- hdu5967数学找规律+逆元
- 【git】git 常用命令(含删除文件)
- 基于Unity实现油画风格的着色器
- GC总结
- 附件2:async/await
- 循序渐进VUE+Element 前端应用开发(4)--- 获取后端数据及产品信息页面的处理
- 完美解决报错Failed to convert value of type &#39;java.lang.String&#39; to required type &#39;java.util.Date&#39;
- 深度学习玩LOL-游戏助手-概述