再次按下返回键退出程序

  1. 使用了ActivityCollector活动管理控制关闭活动,但只能退出当前的活动。之前的活动依旧会重新进栈;

package com.snowalker.wwl.e_point;

import android.app.Activity;

import java.util.ArrayList;
import java.util.List;

/**
 - Created by Administrator on 2015/6/12 0012.
 */
public class ActivityCollector {

    public static List<Activity> activities = new ArrayList<Activity>();

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

    public static void removeActivity(Activity activity) {
        activities.remove(activity);
    }

    public static void finishAll() {
        for (Activity activity : activities) {
            if (!activity.isFinishing()) {
                activity.finish();
            }
        }
    }
}

----------------------想要关闭的活动-----------------------------
ActivityCollector.addActivity(this);

        Button button = (Button) findViewById(R.id.about_us);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ActivityCollector.finishAll();
            }
        });
  1. 使用Application来保存一个全局变量isProgramExit。(对Application使用不熟悉的话查看相关资料)

 public class MyApplication extends Application {
                // 程序退出标记
                private static boolean isProgramExit = false;
                public void setExit(boolean exit) {
                    isProgramExit= exit;
                }

                public boolean isExit() {
                    return isProgramExit;
                }
            }

在你退出时需要结束的每个 Activity 的 onStart 方法加上以下代码:

     protected void onStart() {
            super.onStart();
            MyApplication mApp = (MyApplication)getApplication();
            if(mApp.isExit()) {
                finish();
            }
        }

比如,程序中有三个Activity,A —— B —— C;现在在C中有个按钮,点击退出整个程序。按照上面说的,在A和B的onStart方法中加入判断代码(C中可以不加),C中点击按钮时执行:

        MyApplication mApp = (MyApplication)getApplication();
        mApp.setExit(true);
        finish();

这样C结束了自己,按照流程会回到B,然后B中会进行判断,因为退出条件满足,结束自己;再回到A,同样也结束……

可以看到,这种方法并不高明,甚至有些复杂,因为要在每个Activity的onStart中都加上判断。但不可否认的是这种方法却是绝对有效的,不管你的程序中Activity如何跳转来跳转去,只要一声令下,通通结束,屡试不爽。

所以,有遇到程序退出问题的朋友可以作为参考。