zoukankan      html  css  js  c++  java
  • android应用框架构建------AppManager

    体验一些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<BaseActivity> 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<BaseActivity>();
            }
            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/

  • 相关阅读:
    发布NBearV3最终测试版v3.2.5
    NBearV3教程——Web篇
    JUnit中的设计模式:命令模式
    HTTP协议 通信过程介绍
    JUnit中的设计模式:适配器模式
    《Head First设计模式》 读书笔记15 其余的模式(一) 桥接 生成器 责任链
    SQL基础:数据库规范化与三范式
    《Head First设计模式》 读书笔记13 复合模式 MVC模式
    Android Tab标签的使用基础
    Android设备上的传感器模拟工具:SensorSimulator
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4915671.html
Copyright © 2011-2022 走看看