2 lidec lidec 于 2015.06.26 09:27 提问

安卓activity启动的奇怪问题

sigletask和singleinstance 模式的activityA启动activityB后 按home回桌面,再次打开程序 显示的activityA 这是怎么解释。如何才能在再次打开时直接显示activityB?
现在更蹊跷的是,为activityA加了一个隐藏的侧拉栏,通过拖拽屏幕把侧拉栏显示,从这个侧拉栏上启动activityC,当我们按下home在点击app图标回来时,activityC是存在的,为什么这个activityC没有被回收呢?

4个回答

lht80s
lht80s   2015.07.03 17:04
已采纳

任务栈保存过了,只是又都被弹出去了而已。
你点击图标,app接收到了intent要启动activityA,然后找到了后台栈中的activityA,因为activityA是singleTask模式,所以在将所在栈转移到前台的同时将栈中activityA之上的所有其他Activity都弹出去了,这样activityA处于栈顶,自然显示的就是它了。

lidec
lidec singleInstance也是这样,当从app退到home时再次点击app图标是怎么个启动过程?sighleTask转到前台是会把栈顶清空,那么sigleInstance是直接找根上的那个任务栈? 普通启动模式时转到前台 直接显示栈顶的activity是吗。
2 年多之前 回复
lht80s
lht80s   2015.07.06 10:10

启动模式为singleInstance的Activity会被单独放在一个栈中。所以当你的启动Activity是singleInstance模式的,点击图标后,它所在的栈会回到前台,因为栈中只有他一个,自然只会显示它。
默认模式和singleTop模式都是直接显示栈顶Activity的。

cb269267
cb269267   2015.06.26 12:08

解法1:改为fragmentA, fragmentB
解法2:不用singletask和singleInstance
解法3:静态变量记录当前页面,再启动activityA的时候根据静态变量记录的页面重新恢复(最好activityB也为singletask)

Arnold9009
Arnold9009   2015.07.03 10:43

lz的现象是因为,按home回到桌面,然后再打开app的时候,实际上是activity A接收到了intent,然后启动activity A所在的task,而single task的时候,activityB就被迫出栈了 ,而single instance的时候,activity B跟activity A实际上不在一个task里面,所以这两种情况下,是看不到activity B的;要看到,就要换别的启动模式;
以上是个人理解。。。仅供参考

lidec
lidec 为什么任务栈退出的时候没有保存呢
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片