在开发过程中,我们可能会遇到一种需求,那就是在跳转到新的activity的同时销毁之前打开的任意个activity。
比如,注册功能。一般来说,注册需要分为多个步骤,1、填写手机号,输入验证码;2、填写基本资料;3、设置头像或密码等。
如果这三个步骤每一个都使用一个activity,那么在注册流程结束时,我们需要销毁这三个activity,不然的话,当我们返回时,看到的还是注册界面,显然不对。
如果销毁一个activity,显然很简单,只需要启动新activity的时候调用finish()就ok了,那销毁多个activity又该怎么办呢?
网上有人给出的方案是使用一个ArrayList<Activity>来管理Activity的引用,需要销毁时只需要遍历这个集合然后对每一个元素调用finish()即可。这样虽然可以实现,但是存在内存泄漏的风险,因为如果集合中引用Activity的元素不清空的话,Activity对象就没办法被垃圾回收器回收,造成内存泄露。
网上还有一种方案就是往需要销毁的activity发送广播,activity收到广播之后就自行销毁,这种实现方式效率不高,个人感觉也不优雅。