之前,在Activitity中通过按键2次退出应用,但是有的时候按了2次不能退出。于是,自己想了一个方法,创建一个类,统一管理Activity。
ActivityInstanceManager.java
package com.chinabuye.android.activity;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
public class ActivityInstanceManager {
/******** 用于存放所有Activitiy类的集合 **********/
public static List<Activity> activityList = new ArrayList<Activity>();
/***** 单利管理类 *******/
private static ActivityInstanceManager manager;
private ActivityInstanceManager() {
}
public static ActivityInstanceManager getActivityInstanceManager() {
if (manager == null) {
manager = new ActivityInstanceManager();
}
return manager;
}
/**
* 添加Activity的方法
*
* @param activity
*/
public void addActivity(Activity activity) {
activityList.add(activity);
}
/**
* 退出应用的方法
*/
public void exit() {
for (Activity at : activityList) {
at.finish();
}
System.exit(0);
activityList.clear();
}
}
每个Activity创建的时候,调用下面的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_category);
/*** 管理Activity ****/
manageActivity();
....
在要退出应用的Activity中,添加返回按键监听。
// 手机返回键回调
private long mExitTime;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (side_drawer.isMenuShowing() || side_drawer.isSecondaryMenuShowing()) {
side_drawer.showContent();
} else {
<span style="color:#ff6666;">if ((System.currentTimeMillis() - mExitTime) > 2000) {
Toast.makeText(this, R.string.press_again_to_exit, Toast.LENGTH_SHORT).show();
mExitTime = System.currentTimeMillis();
} else {
ActivityInstanceManager.getActivityInstanceManager().exit();
}</span>
}
return true;
}
// 拦截MENU按钮点击事件,让他无任何操作
if (keyCode == KeyEvent.KEYCODE_MENU) {
return true;
}
return super.onKeyDown(keyCode, event);
}