论思维的重要性--Android中activity的管理

一般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中的数据,导致影响了相关逻辑,针对这个问题的解决方式有两种:

  1. 手动将list置空,这样会重新创建list,就不会出问题了。但是页面都没有finish,如果遍历finish掉的话就有出现了闪屏页。所以不推荐这种方式
  2. 通过activity的生命周期管理list,我们项目中都有管理activity的栈,这个栈是通过生命周期统一管理的,我通过判断activity是不是某类页面,如果是就再activity创建的时候添加,再finish的时候remove掉,这样就完美的解决了问题了。

这个问题解决的时间挺久的,主要是思路不够清晰,对任务栈不够数量,总结归纳一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章