Android学习历程之改良版容器式完全退出应用程序App

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sl2018god/article/details/51296403

对常用的退出应用程序的改良版容器式方法做一下介绍,主要供新人了解,如果有什么不对之处,欢迎指正。它采用的是创建一个类继承Application,将app中的所有activity都添加到一个List集合中,再点击退出按钮时,遍历集合,直接销毁所有activity,重点是采用弱引用,避免内存泄露问题。

一 .   创建自定义类

 
 
public class ExitApplication extends Application {

    private static ExitApplication sInstance;//全局唯一应用实例
    private static List<WeakReference<Activity>> sList;//存储所有界面的集合

    private ExitApplication(){}

    /**
     * 获取全局唯一应用实例
     * @return
     *          返回全局唯一应用实例
     */
    public static ExitApplication getInstance(){
        if (sInstance == null){
            synchronized (ExitApplication.class){
                if (sInstance == null){
                    sInstance = new ExitApplication();
                    sList = new ArrayList<>();
                }
            }
        }
        return sInstance;
    }

    /**
     * 添加传入界面到集合中
     * @param activity
     *          传入的界面
     */
    public void addActivity(Activity activity){
        if (sList == null){
            sList = new ArrayList<>();
        }
        sList.add(new WeakReference<>(activity));
    }

    /**
     * 销毁所有界面,退出应用,并停止网络状态监听服务
     * @throws Exception
     *          当存储界面集合为空时,抛出异常
     */
    public void exitApplication() throws IllegalArgumentException {
        if (sList == null){
            throw new IllegalArgumentException("存储activity的集合为空异常!");
        }
        for (WeakReference<Activity> reference: sList){
            if (reference.get() != null){
                reference.get().finish();
            }
        }
    }

}
 
 

二 .   在每个activity中添加

 
 
ExitApplication.getInstance().addActivity(this);

三 .  在需要实现完全退出app功能的地方添加

 
 
ExitApplication.getInstance().exitApplication();

猜你喜欢

转载自blog.csdn.net/sl2018god/article/details/51296403