退出App的几种方法

来源:互联网 发布:长春市盘古网络 法人 编辑:程序博客网 时间:2024/04/27 14:45

查阅了些资料,要完全退出App,最常用的方法是:

1.将activity放入一个list集合,然后遍历关闭。
具体步骤如下:
1)创建一个activity管理类:ActivityCollector
定义三个共有静态的方法;定义存储activity的list集合。方法如下:
①addActivity:往集合里添加activity对象
②removeActivity:移除activity对象
③finishAll:增强for循环,遍历所有activity并销毁

2)在baseActivity中
①onCreate方法中添加:ActivityCollector.addActivity(this).
②onDestory方法中添加:ActivityCollector.removeActivity(this).
③可以在任何一个集成baseActivity的activity中调用
ActivityCollector.finishAll().
从而关闭所有App.

具体代码如下:

public class ActivityCollector {      public static LinkedList<Activity> activities = new LinkedList<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();              }          }      }  }  

2.用singTask模式

将主Activity的启动模式设置位singleTask:简单的说就是这个Activity重新回到栈顶部时,会把他上面所有Activity干掉,然后再把自己finish掉就退出程序了。不过这种方法会存在特殊情况,退不出程序!

3.杀死后台进程

上面说的是关闭所有Activity的,但是有些时候我们可能想杀死整个App,连后台任务都杀死 杀得一干二净的话,可以使用搭配着下述代码使用:

/**  * 退出应用程序  */  public void AppExit(Context context) {      try {          ActivityCollector.finishAll();          ActivityManager activityMgr = (ActivityManager) context                  .getSystemService(Context.ACTIVITY_SERVICE);          activityMgr.killBackgroundProcesses(context.getPackageName());          System.exit(0);      } catch (Exception ignored) {}  }  

4.双击退出程序

方法一:定义一个变量,来标识是否退出

// 定义一个变量,来标识是否退出private static boolean isExit = false;Handler mHandler = new Handler() {    @Override    public void handleMessage(Message msg) {        super.handleMessage(msg);        isExit = false;    }};public boolean onKeyDown(int keyCode, KeyEvent event) {    if (keyCode == KeyEvent.KEYCODE_BACK) {        if (!isExit) {            isExit = true;            Toast.makeText(getApplicationContext(), "再按一次退出程序",                    Toast.LENGTH_SHORT).show();            // 利用handler延迟发送更改状态信息            mHandler.sendEmptyMessageDelayed(0, 2000);        } else {            exit(this);        }        return false;    }return super.onKeyDown(keyCode, event);}

方法二:保存点击时间

//保存点击的时间private long exitTime = 0;public boolean onKeyDown(int keyCode, KeyEvent event) {    if (keyCode == KeyEvent.KEYCODE_BACK) {        if ((System.currentTimeMillis() - exitTime) > 2000) {            Toast.makeText(getApplicationContext(), "再按一次退出程序",                    Toast.LENGTH_SHORT).show();            exitTime = System.currentTimeMillis();        } else {                        exit();                      }        return false;    }        return super.onKeyDown(keyCode, event);}
0 0