博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android应用框架构建------AppManager
阅读量:6843 次
发布时间:2019-06-26

本文共 3232 字,大约阅读时间需要 10 分钟。

体验一些Android应用程序开发的个人总结

当我们开发应用程序。经常有非常多非常多activity,在这一刻,我们需要一个activity堆栈,以帮助管理activity的finish和start。

搭OSC安德鲁斯client案例。代码使用了一个stack<Activity>来保存所有的activity。

/** * 应用程序Activity管理类:用于Activity管理和应用程序退出 *  * @author kymjs * @version 1.0 * @created 2013-11-24 */public class AppManager {    private static Stack
activityStack; private static AppManager instance; private AppManager() { } /** * 单实例 , UI无需考虑多线程同步问题 */ public static AppManager getAppManager() { if (instance == null) { instance = new AppManager(); } return instance; } /** * 加入Activity到栈 */ public void addActivity(BaseActivity activity) { if (activityStack == null) { activityStack = new Stack
(); } activityStack.add(activity); } /** * 获取当前Activity(栈顶Activity) */ public BaseActivity currentActivity() { if (activityStack == null || activityStack.isEmpty()) { return null; } BaseActivity activity = activityStack.lastElement(); return activity; } /** * 获取当前Activity(栈顶Activity) 没有找到则返回null */ public BaseActivity findActivity(Class

> cls) { BaseActivity activity = null; for (BaseActivity aty : activityStack) { if (aty.getClass().equals(cls)) { activity = aty; break; } } return activity; } /** * 结束当前Activity(栈顶Activity) */ public void finishActivity() { BaseActivity 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 (BaseActivity activity : activityStack) { if (activity.getClass().equals(cls)) { finishActivity(activity); } } } /** * 关闭除了指定activity以外的所有activity 假设cls不存在于栈中,则栈所有清空 * * @param cls */ public void finishOthersActivity(Class<?

> cls) { for (BaseActivity 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.killBackgroundProcesses(context.getPackageName()); System.exit(0); } catch (Exception e) { System.exit(0); } } }

这里是对整个应用的activity操作,能够看到,有退出应用的方法。关闭指定activity的方法,关闭所有activity的方法,以及关闭除了指定activity以外的所有activity。

那么说一下这个类的作用吧,首先。该类使用一个单例模式去管理,使得整个应用在不论什么地方都能够訪问这个activity栈。这样就方便了应用的操作。

比如我们能够这样定义一个Toast

public static showMessage(String msg){    Toast.makeText(AppManager.getAppManager().currentActivity(), msg, Toast.LENGTH_SHORT).show();}

能够看到。我们定义了一个能够在全局使用的Toast,不再受Context的限制,当然在使用之前你须要首先确定你的应用没有被系统销毁。

再比方我们有时候在一个service中做业务处理,然后想返回处理结果的时候。却不知道当时的activity是否依然存在(它有可能已经被用户关闭)。此时就能够使用activity栈获取到当前栈顶的activity通过instanceofkeyword推断是否是我们想要的activity。

许多其他的用途。大家发现它。

版权声明:原创文章,转载请注明来自 http://kymjs.com/

你可能感兴趣的文章
memcached的分布式算法-Consistent Hashing
查看>>
韩忠恒:解读Power System智慧运算基础
查看>>
来自Reddit的声音:网络人员对SDN说“不”
查看>>
贵阳“小步快跑”搭上云计算的早班车
查看>>
配置少量固态硬盘即能大幅提升性能
查看>>
国内车载信息安全市场 东软靠技术创新的行动力独树一帜
查看>>
中国银行携手IBM成功建成智能化网点
查看>>
再谈大型数据中心的运维工作
查看>>
报告显示电话监控技术处于发展浪潮
查看>>
安全研究人员发现可以利用推特控制僵尸网络
查看>>
三种在Linux上创建或扩展交换分区的简单方法
查看>>
LMD Tool:Linux恶意软件检测工具
查看>>
铜缆宽带接入即将走向末路?
查看>>
哪些技术对5G贡献最大?毫米波成工程师追捧之一
查看>>
企业级SaaS服务的现实之路:放弃团队 直指公司
查看>>
你应该成为 Web 开发者的 5 大理由
查看>>
Locky勒索软件是如何利用DGA的?
查看>>
打造自己的 Python 编码环境
查看>>
使用Azure托管磁盘简化云存储管理
查看>>
你需要知道知道这几个因素会不利于关键词排名优化
查看>>