Android_完全退出

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

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

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

完整的AppManager類代碼:
[java]
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);

You May Also Like