查阅了些资料,要完全退出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);
}