做過Android開發的人都知道,應用程序點擊返回鍵 或者 代碼顯示調用了Activity.finish()方法都無法完全退出,通過任務管理工具可以看到他們還在進程中。 

下面我將分享 OSChina.NET Android版客戶端 完全退出程序的方法: 

1. 添加權限

<uses-permission android:name="android.permission.RESTART_PACKAGES" />
2. 導入AppManager工具類 
AppManager類是一個自定義的工具類,作用是將應用程序所有启動的Activity都添加到堆棧,最終退出應用程序時全部釋放掉Activity。 

完整的AppManager類代碼: 
package net.oschina.app;

import java.util.Stack;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;

/**
 * 應用程序Activity管理類
 * @author  liux
 */
public class AppManager {
	
	private static Stack<Activity> activityStack;
	private static AppManager instance;
	
	private AppManager(){}
	/**
	 * 單一實例
	 */
	public static AppManager getAppManager(){
		if(instance==null){
			instance=new AppManager();
		}
		return instance;
	}
	/**
	 * 添加Activity到堆棧
	 */
	public void addActivity(Activity activity){
		if(activityStack==null){
			activityStack=new Stack<Activity>();
		}
		activityStack.add(activity);
	}
	/**
	 * 獲取當前Activity(堆棧中最後一個壓入的)
	 */
	public Activity currentActivity(){
		Activity activity=activityStack.lastElement();
		return activity;
	}
	/**
	 * 結束當前Activity(堆棧中最後一個壓入的)
	 */
	public void finishActivity(){
		Activity activity=activityStack.lastElement();
		if(activity!=null){
			activity.finish();
			activity=null;
		}
	}
	/**
	 * 結束指定的Activity
	 */
	public void finishActivity(Activity activity){
		if(activity!=null){
			activityStack.remove(activity);
			activity.finish();
			activity=null;
		}
	}
	/**
	 * 結束指定類名的Activity
	 */
	public void finishActivity(Class<?> cls){
		for (Activity 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();
	}
	/**
	 * 退出應用程序
	 */
	public void AppExit(Context context) {
		try {
			finishAllActivity();
			ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
			activityMgr.restartPackage(context.getPackageName());
			System.exit(0);
		} catch (Exception e) {	}
	}
}
3. 使用AppManager工具類 
Activity启動時,在的onCreate方法裏面,將該Activity實例添加到AppManager的堆棧
  AppManager.getAppManager().addActivity(this);
需要退出程序時,調用
  AppManager.getAppManager().AppExit(this);

 

From:CSDN

 

 

 

arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()