zoukankan      html  css  js  c++  java
  • 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) {
            }
        }
    
    }
    AppManager.java

    二、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的管理,以及一些别的操作。

  • 相关阅读:
    基于注解的ssh框架之spring配置文件
    hdu 4770 Lights Against Dudely
    便捷开发工具(未完)
    solr 简单搭建 数据库数据同步(待续)
    Nginx对某个文件夹或整个站点进行登录认证的方法
    swift 单例模式
    POJ 2823 Sliding Window(单调队列)
    Android 网络下载图片
    一个表空间offline后alert日志报ORA-01135 和ORA-01110的问题
    [c#]分析器错误消息: 发现不明白的匹配。
  • 原文地址:https://www.cnblogs.com/xqxacm/p/7826899.html
Copyright © 2011-2022 走看看