android Activity管理類(全域性管理Activity)
阿新 • • 發佈:2019-02-15
又忙了一個多月,完成了新專案的第一階段,最近覺得自己加班加的麻木了,沒時間總結和學習東西。算了,說正事。
大家在開發專案的時候,第一步就是專案框架的搭建。包含了 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(); } } }
上面就是我結合網路上和專案中總結的可能出現的情況,可能還不完善,希望大家提出意見和建議。複製就可以用了,就不用再上傳附件了。(樓主有點懶)
在最後,我加上了一個退出應用程式的方法。在後面的文章裡,我會介紹應用通過廣播退出應用的方式。感謝大家。