@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
if ((System.currentTimeMillis() - exitTime) > 2000) {
showToast("再按一次退出程序");
exitTime = System.currentTimeMillis();
} else {
ExitAPPUtils.exit();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
public class ExitAPP {
private static List<Activity> activityList = new LinkedList<Activity>();
// 添加Activity到容器中
public static void addActivity(Activity activity) {
activityList.add(activity);
}
// 移除Activity从容器中
public static void removeActivity(Activity activity) {
activityList.remove(activity);
}
// 遍历所有Activity并finish
public static void exit() {
for (Activity activity : activityList) {
if (!activity.isFinishing()) {
activity.finish();
}
}
System.exit(0);
}
}
以上是我之前用的一种退出app的方法,但是后来我在项目中用了新的方法:
private long exitTime;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
if ((System.currentTimeMillis() - exitTime) > 2000) {
ToastUtils.showToast("再按一次退出程序");
exitTime = System.currentTimeMillis();
} else {
stopEveryThing();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
然后我在stopEveryThing里面做了判断,判断是否当前有自己的服务再运行,如果有的话就关闭服务。
private void stopEveryThing() {
if (“判断服务是否正在运行”) {
stopService();
finish();
new Handler().postDelayed(() -> System.exit(0), 1000);
} else {
finish();
System.exit(0);
}
}
public boolean judgeServiceIsRunnung() {
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("服务的全类名,比如ye.da.shen.voice.worktask.scanService".equals(service.service.getClassName())) {
return true;
}
}
return false;
}