1. 程式人生 > >android Activity管理類(全域性管理Activity)

android Activity管理類(全域性管理Activity)

又忙了一個多月,完成了新專案的第一階段,最近覺得自己加班加的麻木了,沒時間總結和學習東西。算了,說正事。

大家在開發專案的時候,第一步就是專案框架的搭建。包含了 http 請求框架, base基類(BaseActivity、BaseFragment等)等。

當然我們也要加入所有Activity的管理類。

相信大家在處理Activity跳轉,或者是刪除指定的Activity和所有的Activity都會遇到困惑。尤其是在做專案的退出整個應用功能模組的時候,需要關閉所有的Activity,這裡對於新手來說經常性會存在MainActivity已經finish掉了,但是還有其他的Activity存在。那麼這個時候我們就需要這麼個AppManager

管理類了。

那麼我們要怎麼來實現Activity的管理呢?

大家都知道,Android系統有自己的Activity管理機制,也就是 Activity Stack(棧)。奉行著 先進後出,後進先出的原則。那麼我們就通過Stack來進行Activity的管理。

第一步,肯定是建立 Stack<Activity>集合。然後根據Stack<Activity>集合的方法進行操作。

實現包括:新增Activity到堆疊、獲取當前的Activity(堆疊最後一個)、結束當前的Activity(堆疊最後一個)、結束指定的Activity、結束指定類名的Activity、結束所有的Activity等

方法。

不說廢話,先貼程式碼: 

/** 
 * Activity管理類 
 *  
 */  
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();  
        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 (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();  
    }  
  
    /** 
     * 退出應用程式 
     */  
    @SuppressWarnings("deprecation")  
    public void AppExit(Context context) {  
        try {  
            finishAllActivity();  
            ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
            activityManager.restartPackage(context.getPackageName());  
            System.exit(0);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  

上面就是我結合網路上和專案中總結的可能出現的情況,可能還不完善,希望大家提出意見和建議。複製就可以用了,就不用再上傳附件了。(樓主有點懶)

在最後,我加上了一個退出應用程式的方法。在後面的文章裡,我會介紹應用通過廣播退出應用的方式。感謝大家。