之前忘记在哪看到一篇关于“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()方法。