问题描述
- 安卓activity启动的奇怪问题
-
sigletask和singleinstance 模式的activityA启动activityB后 按home回桌面,再次打开程序 显示的activityA 这是怎么解释。如何才能在再次打开时直接显示activityB?
现在更蹊跷的是,为activityA加了一个隐藏的侧拉栏,通过拖拽屏幕把侧拉栏显示,从这个侧拉栏上启动activityC,当我们按下home在点击app图标回来时,activityC是存在的,为什么这个activityC没有被回收呢?
解决方案
任务栈保存过了,只是又都被弹出去了而已。
你点击图标,app接收到了intent要启动activityA,然后找到了后台栈中的activityA,因为activityA是singleTask模式,所以在将所在栈转移到前台的同时将栈中activityA之上的所有其他Activity都弹出去了,这样activityA处于栈顶,自然显示的就是它了。
解决方案二:
启动模式为singleInstance的Activity会被单独放在一个栈中。所以当你的启动Activity是singleInstance模式的,点击图标后,它所在的栈会回到前台,因为栈中只有他一个,自然只会显示它。
默认模式和singleTop模式都是直接显示栈顶Activity的。
解决方案三:
解法1:改为fragmentA, fragmentB
解法2:不用singletask和singleInstance
解法3:静态变量记录当前页面,再启动activityA的时候根据静态变量记录的页面重新恢复(最好activityB也为singletask)
解决方案四:
lz的现象是因为,按home回到桌面,然后再打开app的时候,实际上是activity A接收到了intent,然后启动activity A所在的task,而single task的时候,activityB就被迫出栈了 ,而single instance的时候,activity B跟activity A实际上不在一个task里面,所以这两种情况下,是看不到activity B的;要看到,就要换别的启动模式;
以上是个人理解。。。仅供参考
时间: 2024-12-31 07:17:13