有的时候我们的项目需要用到一键退出的功能,但是网上大多数退出功能都是使用一个集合,然后放在基类里边,分别添加每一个 Activity 到集合里边,然后在取出每个 Activity 进行销毁,代码如下:
private List<Activity> activityList = new ArrayList<>(); activityList.add(this); /** * 一键退出 */ public void finishActivity() { activities.clear(); for (int i = 0; i < activityList.size(); i++) { activityList.get(i).finish(); } }这么写,如果对于一些新手或者不了解 Android 回收机制的人来说就是一个完美的解决办法,但是当你真正了解过 Android 的回收机制之后,你就会发现,这么写是多么的愚蠢,具体为什么我就不多做解释了,请读者自己查找相关资料了解 Android 的回收机制,这里给出正确的代码,但是不代表这是完美的解决方案,代码如下:
private List<SoftReference<Activity>> activities = new ArrayList<>(); SoftReference<Activity> activitySoftReference = new SoftReference<Activity>(this); activities.add(activitySoftReference); /** * 一键退出 */ public void finishActivity() { for (int i = 0; i < activities.size(); i++) { SoftReference<Activity> softReference = activities.get(i); if(softReference.get() != null) { softReference.get().finish(); } } activities.clear(); }