標籤:公司 程式 模式 tac 移除 resume 單例模式 catch this
原文:Android項目實戰(三十七):Activity管理及BaseActivity的實現
Ps:7-10月 完成公司兩個app項目上架。漏掉的總結 開始慢慢補上。
一、寫一個Activity的管理類
1、單例模式,以棧(先進後出)的形式儲存Activity對象
public class AppManager { private static Stack<Activity> activityStack; // Activity棧 , 先進後出 private static AppManager instance; /** * 單例模式執行個體 */ public static AppManager getAppManager() { if (instance == null) { instance = new AppManager(); } return instance; }}
2、給AppManager管理類添加幾個常用方法。
(1)、添加Activity對象
/** * 添加Activity到堆棧 */ public void addActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack<Activity>(); } activityStack.add(activity); }
(2)、結束當前Activity對象,即棧尾的對象
/** * 結束當前Activity(堆棧中最後一個壓入的) */ public void finishActivity() { Activity activity = activityStack.lastElement(); if (activity != null) { activity.finish(); activity = null; } }
(3)、擷取當前Activity對象,即棧尾對象
/** * 擷取當前Activity(堆棧中最後一個壓入的) */ public Activity currentActivity() { Activity activity = activityStack.lastElement(); return activity; }
(4)、結束指定的Activity對象,參數為某個Activity對象
/** * 結束指定的Activity */ public void finishActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); activity.finish(); activity = null; } }
(5)、結束指定類名的Activity對象
/** * 結束指定類名的Activity */ public void finishActivity(Class<?> cls) { for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { finishActivity(activity); } } }
(6)、結束所有的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(); }
(7)、退出應用程式
/** * 退出應用程式 */ 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) { } }
完整代碼:
/** @author xqx* @emil [email protected]* create at 2017/6/12* description: 管理activity的類*/import android.app.Activity;import android.app.ActivityManager;import android.content.Context;import java.util.Stack;public class AppManager { private static Stack<Activity> activityStack; private static AppManager instance; /** * 單例模式執行個體 */ 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) { } }}
AppManager.java
二、BaseActivity的使用
/*** @author xqx* @email [email protected]* blog:http://www.cnblogs.com/xqxacm/* createAt 2017/06/13* description: 基礎類, 對Activity 的管理*/public class BaseActivity extends Activity{ /** * activity堆棧管理 */ protected AppManager appManager = AppManager.getAppManager(); private String contextString ; // 類名 @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 添加activity 到棧 appManager.addActivity(this); } protected void onPause() { super.onPause(); // 可以在此添加一些友盟的統計代碼等 } protected void onResume() { super.onResume(); // 可以在此添加一些友盟的統計代碼等 } @Override protected void onDestroy() { super.onDestroy(); // 從棧中移除activity appManager.finishActivity(this); }}
三、BaseFragmentActivity 的使用
public class BaseFragmentActivity extends FragmentActivity { /** * activity堆棧管理 */ protected AppManager appManager = AppManager.getAppManager(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 添加activity 到棧 appManager.addActivity(this); } protected void onPause() { super.onPause(); // 可以在此添加一些友盟的統計代碼等 } protected void onResume() { super.onResume(); // 可以在此添加一些友盟的統計代碼等 } @Override protected void onDestroy() { super.onDestroy(); // 從棧中移除activity appManager.finishActivity(this); }}
之後就可以基礎這兩個基礎類了,實現對Activity的管理,以及一些別的操作。
Android項目實戰(三十七):Activity管理及BaseActivity的實現