【安卓开发】用list退出多个activity界面

325 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

设计背景及解决方案

  • Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?
  • 对于单一Activity的应用来说,退出很简单,直接finish()即可。
  • 当然,也可以采用类似killProcess()和System.exit()这样的方法。
  • 对于多个activity
    • 1、记录打开的Activity:每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。
    • 2、发送特定广播:在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可
    • 3、递归退出:在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。当然,为了编程方便,最好是定义一个Activity基类,处理这些共通问题。

优点

  • 实现简单,动作迅速,逻辑清晰

exit.java

  • 思路采用list保存activity实例,把每个activity记住,然后逐一干掉
  • 自己写一个 exit.java 通过 list 将多个 activity 添加进来,然后实现批量退出
public class exit extends Application {

    private List<Activity> list = new ArrayList<Activity>();
    private static exit ex;
    private exit() {
    }
    public static exit getInstance() {
        if (null == ex) {
            ex = new exit();
        }
        return ex;
    }

    public void addActivity(Activity activity) {
        list.add(activity);
    }

    public void exit(Context context) {
        for (Activity activity : list) {
            //销毁所有的activity
            activity.finish();
        }
        System.exit(0);
    }

}
  • 在每个需要退出的 activity 里面的 onCreate 方法里加上 exit.getInstance().addActivity(this);即可退出APP(多个activity界面)
  • 简而言之,通过单例模式把每个Activity 的引用添加到一个全局链表中,每次退出程序调用System.exit(0)时,先调用链表中Activity 的finish方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list);
    exit.getInstance().addActivity(this);
}

效果图

在这里插入图片描述