一般activity使用stack来管理,但是因为项目中有清除前面几个页面的需求,也有可能全部清除相关的页面,使用stack局限性比较高,他只能从栈顶一次弹出,我想弹出除当前页的其他页面,可以通过list集合便利解决,所以我使用了list来单独管理这类页面。每次加载页面就添加到list,关闭就remove,对于弹出几个页面就便利list,但是如果跳页的时候把相关的页面全部清空,就对导致跳转的页面相当于项目的启动页,出现闪屏现象。当然,这并不是crash,不过给用户的感觉不是很好,所以我做了相关的优化。
给跳转的intent添加flag
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);//清空栈需与FLAG_ACTIVITY_NEW_TASK一起使用
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//相当于singleTask
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//相当于standard
这个方式解决了闪屏的问题,不过有来了新的问题:我之前对某类activity使用list来管理,这种添砖方式不会手动的去清除list中的数据,导致影响了相关逻辑,针对这个问题的解决方式有两种:
- 手动将list置空,这样会重新创建list,就不会出问题了。但是页面都没有finish,如果遍历finish掉的话就有出现了闪屏页。所以不推荐这种方式
- 通过activity的生命周期管理list,我们项目中都有管理activity的栈,这个栈是通过生命周期统一管理的,我通过判断activity是不是某类页面,如果是就再activity创建的时候添加,再finish的时候remove掉,这样就完美的解决了问题了。
这个问题解决的时间挺久的,主要是思路不够清晰,对任务栈不够数量,总结归纳一下。