android activity 管理工具類

n7w77 9年前發布 | 5K 次閱讀 Java Android

import java.util.Stack;

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

public class AppManager {

private static Stack<Activity> activityStack;
private static AppManager instance;

private AppManager(){
}

/**
 * 功能描述:獲取AppManager對象,單例模式
 * @return
 */
public static AppManager getAppManager(){
    if (instance == null){
        instance = new AppManager();
    }
    return instance;
}

/**
 * 功能描述: 添加Activity到堆棧
 * @param activity
 */
public void addActivity(Activity activity){
    if (activityStack == null){
        activityStack = new Stack<Activity>();
    }
    activityStack.add(activity);
}

/**
 * 功能描述: 獲取當前Activity(堆棧中最后一個壓入的)
 * @return
 */
public Activity currentActivity(){
    Activity activity = activityStack.lastElement();
    return activity;
}

/**
 * 功能描述: 結束當前Activity(堆棧中最后一個壓入的)
 */
public void finishActivity(){
    Activity activity = activityStack.lastElement();
    finishActivity(activity);
}

/**
 * 功能描述: 結束指定的Activity
 * @param activity
 */
public void finishActivity(Activity activity){
    if (activity != null){
        activityStack.remove(activity);
        activity.finish();
        activity = null;
    }
}

/**
 * 功能描述: 移除指定的Activity
 * @param activity
 */
public void removeActivity(Activity activity){
    if (activity != null){
        activityStack.remove(activity);
        activity = null;
    }
}

/**
 * 功能描述: 結束指定類名的Activity
 * @param cls
 */
public static void finishActivity(Class<?> cls){
    try {
        Stack<Activity> activityStackTemp = new Stack<Activity>();
        for (Activity activity : activityStack){
            if (activity.getClass().equals(cls)){
                //判斷activity是否已經消失,如果未消失,則消失activity,如果棧里面有activity,但是已經消失了,則從棧里面
                //移除該對象,為了防止多頁面跳時,部分activity被錯誤加入.
                if(!activity.isFinishing()){
                    activityStackTemp.add(activity);
                    activity.finish();
                }
            }
        }
        //在list集合遍歷的時候,不能刪除list中的元素,否則會報java.util.ConcurrentModificationException異常
        activityStack.removeAll(activityStackTemp);
    // 在這里捕獲空,當程序退出,又接收推送,點擊推送,這個方法報空
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 功能描述: 結束所有Activity
 */
public static void finishAllActivity(){
    //這里可能會報數組越界的錯誤提前異常捕獲
    Stack<Activity> activityStackTemp = new Stack<Activity>();
    activityStackTemp.addAll(activityStack);
    try {
        for (int i = 0, size = activityStackTemp.size(); i < size; i++){
            if (null != activityStackTemp.get(i)){
                if(!activityStackTemp.get(i).isFinishing()){
                    activityStackTemp.get(i).finish();
                }
            }
        }
        activityStack.clear();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 功能描述: 退出應用程序
 * @param context 上下文
 * @param isBackground 是否開啟后臺運行
 */
public void AppExit(Context context, Boolean isBackground){
    try{
        finishAllActivity();
        ActivityManager activityMgr = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);
        activityMgr.killBackgroundProcesses(context.getPackageName());

// android.os.Process.killProcess(android.os.Process.myPid()); } catch (Exception e){ e.printStackTrace(); } finally{ // 注意,如果您有后臺程序運行,請不要支持此句子 if (!isBackground){ // System.exit(0); // 程序在下載時開啟了下載service,此處不要殺掉任何進程 } } } } </pre>

 本文由用戶 n7w77 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!