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 djlxqx@163.com * 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) { } } }
二、BaseActivity的使用
/** * @author xqx * @email djlxqx@163.com * 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的管理,以及一些别的操作。
作者:听着music睡
出处:http://www.cnblogs.com/xqxacm/
Android交流群:38197636
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2015-11-13 Android 购物车功能的实现
2014-11-13 Android项目实战(一): SpannableString与SpannableStringBuilder(转)