之前忘記在哪看到一篇關于“android應用程式如何完全退出”的Blog,寫的不錯,我想這對很多人都有用,為了文章的原創,是以我結合了自己的代碼環境,把這個經驗分享給大夥。
第一步:建立一個Activity管理類,用來管理所有被使用者點選過而沒有被finish()掉的Activity:
import java.util.Stack;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
/**
* 應用程式Activity管理類:用于Activity管理和應用程式退出
* @author hubin
*/
public class AppManager {
private static Stack<BaseActivity> activityStack;
private static AppManager instance;
private AppManager() {}
/**
* 單執行個體 , UI無需考慮多線程同步問題
*/
public static AppManager getAppManager() {
if (instance == null) {
instance = new AppManager();
}
return instance;
}
/**
* 添加Activity到棧
* @param activity
*/
<strong><span style="color:#ff0000;">public void addActivity(BaseActivity activity) {
if (activityStack == null) {
activityStack = new Stack<BaseActivity>();
}
activityStack.add(activity);
}</span></strong>
/**
* 擷取目前Activity(棧頂Activity)
*/
public BaseActivity currentActivity() {
if (activityStack == null || activityStack.isEmpty()) {
return null;
}
BaseActivity activity = activityStack.lastElement();
return activity;
}
/**
* 擷取目前Activity(棧頂Activity) 沒有找到則傳回null
*/
public BaseActivity findActivity(Class<?> cls) {
BaseActivity activity = null;
for (BaseActivity aty : activityStack) {
if (aty.getClass().equals(cls)) {
activity = aty;
break;
}
}
return activity;
}
/**
* 結束目前Activity(棧頂Activity)
*/
public void finishActivity() {
BaseActivity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* 結束指定的Activity(重載)
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
/**
* 結束指定的Activity(重載)
*/
public void finishActivity(Class<?> cls) {
for (BaseActivity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
/**
* 關閉除了指定activity以外的全部activity 如果cls不存在于棧中,則棧全部清空
* @param cls
*/
public void finishOthersActivity(Class<?> cls) {
for (BaseActivity activity : activityStack) {
if (!(activity.getClass().equals(cls))) {
finishActivity(activity);
}
}
}
/**
* 結束所有Activity
*/
public void finishAllActivity() {
for (int i = 0, size = activityStack.size(); i < size; i++) {
if (null != activityStack.get(i)) {
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 應用程式退出,一般調用此方法即可!
*/
<strong><span style="color:#ff0000;">public void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityMgr = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.killBackgroundProcesses(context.getPackageName());
System.exit(0);
} catch (Exception e) {
System.exit(0);
}
}</span></strong>
}
第二步:要求所有的Activity類中在其onCreate()方法中:
AppManager.getAppManager().addActivity(this);
第三步:按其需求,由你自己決定啥時候調用AppExit()方法。