由Actvity启动模式之SingleInstance引起的坑的反思

简介: 以前对于Activity的启动模式只限于文字说明理解的层面,但最近的一个问题让我对启动模式有了更深的了解。 Activity有四大启动模式:standard,singleTop,singleTask,singleInstance,这些启动模式的特点就不在这里细说,主要说一下SingleIn...

以前对于Activity的启动模式只限于文字说明理解的层面,但最近的一个问题让我对启动模式有了更深的了解。

Activity有四大启动模式:standard,singleTop,singleTask,singleInstance,这些启动模式的特点就不在这里细说,主要说一下SingleInstance这种启动模式的Activity启动其它模式的Activity的效果与可能出现的问题:

问题是这么描述的,A栈最顶层的一个Activity启动了一个启动模式为SingleInstance的Activity-B,那么如果B启动一个启动模式为standard的Activity-C,那么C会出现在哪个栈?是A上面还是B,还是建一个新栈C?


今天我就被这种情况给困住了,因为我无意中造成了这种情况:B一旦启动C,则A也会被带出来,我在执行回退操作的时候的顺序是C->A,不见了B栈中的Activity对象,我刚开始以为是B或者C无意中启动了A最顶层的对象并消失,但是后来发现我在退出程序的时候发现B栈中的对象B中会报错,我猜B对象可能在程序退出的时候还存活,只是它没有存在于正常的回退栈中。如下图所示:


对于B消失的这种情况,建议将启动模式改为SingleTask,B启动C之后,C位于B栈内,回退也是正常流程,如果B设置为了SingleInstance,则会出现意料之外的问题,很难找到病症。

目录
相关文章
|
测试技术
解决Bug应有的心态和解决方法的一些思路、方法和心得
永远要相信程序是不会骗你的,是自己在处理理逻辑中出问题,而在特定的环境中才会出现或者是自己压根就想不到情况下出现。 前几天在处理一个接口任务时,在测试环境跑是一点都没有,但在正式环境却没有将数据拉下来。没有报任何错误,一度怀疑、抱怨! 还好最后找到问题解决了!
82 0
|
Java Linux 网络安全
Android系统学习总结一
Android系统学习总结一
203 1
|
存储 Android开发
温故知新—Activity的五种启动模式
Activity的五种启动模式
211 0
温故知新—Activity的五种启动模式
|
安全 Java 测试技术
全面复盘Android开发者容易忽视的Backup功能(1)
全面复盘Android开发者容易忽视的Backup功能(1)
全面复盘Android开发者容易忽视的Backup功能(1)
|
XML 安全 API
全面复盘Android开发者容易忽视的Backup功能(2)
全面复盘Android开发者容易忽视的Backup功能(2)
全面复盘Android开发者容易忽视的Backup功能(2)
|
开发框架 监控 数据可视化
|
缓存 Java 程序员
庖丁解牛 Activity 启动流程
庖丁解牛 Activity 启动流程
庖丁解牛 Activity 启动流程
|
Ubuntu Linux 数据安全/隐私保护
同事的一个动作,让我熬夜的工作全部白费…….
xtrlock 工具在大多数 Linux 发行版软件库里,我们可以直接使用对应的发行版的包管理器来安装它。 在 Debian,Ubuntu,Linux Mint上可直接使用 apt-get 命令安装
329 0
同事的一个动作,让我熬夜的工作全部白费…….