【OSC手機App技術解析】- Android完全退出程序

做過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);

如果大家有什麼疑問的話,歡迎在下面回帖一起探討。

PS:

OSC Android客戶端下載地址: http://www.oschina.net/uploads/osc.apk
OSC iPhone客戶端下載地址:
http://www.oschina.net/uploads/osc.ipa
OSC Windows Phone客戶端下載地址: http://www.oschina.net/uploads/osc.xap


轉載:http://www.oschina.net/question/157182_59222

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章