由Actvity启动模式之SingleInstance引起的坑的反思
2016-02-19 19:17
357 查看
以前对于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,则会出现意料之外的问题,很难找到病症。
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,则会出现意料之外的问题,很难找到病症。
相关文章推荐
- 安卓studio导入项目步骤详解
- mybatis防止sql注入
- CSS清除浮动常用方法小结
- zoj 3656 2-sat 不错的题
- 生活的大门向你敞开……
- iOS旧项目升级WatchOS2.0时遇到的问题
- 我来试试视频功能
- Typescript学习笔记(一)基础类型
- 黑马程序员——Java内存结构
- 一份面试题的总结 1
- iOS开发-编译使用动态库
- uboot环境变量实现分析
- C++字符串类
- hdu4540 威威猫系列故事——打地鼠(简单DP)
- 节后第一天上班
- jstack命令使用
- CSS之BFC详解
- 利用数组和链表实现简单的哈希表
- c语言入门之项目1.9——利用switch解决实际问题
- centos 6.6 安装redis