zoukankan      html  css  js  c++  java
  • Android开发 在Application用于初始化的工具类

    代码

    package cn.hawk.common.app;
    
    import android.app.Application;
    import android.os.Handler;
    import android.os.HandlerThread;
    import android.os.Looper;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    public class InitHelp {
        private static InitHelp sInitHelp;
        private Map<String, InitWork> mInitWorkList;
        private Handler mMainHandler = new Handler(Looper.getMainLooper());
        private Handler mChildHandler;
        private HandlerThread mChildHandlerThread = new HandlerThread("ChildInitHelp");
    
        private InitHelp(Map<String, InitWork> initWorkList) {
            mInitWorkList = initWorkList;
    
        }
    
        public void launch(Application application) {
            mChildHandlerThread.start();
            mChildHandler = new Handler(mChildHandlerThread.getLooper());
            Set<String> keySet = mInitWorkList.keySet();
            for (String key : keySet) {
                InitWork initWork = mInitWorkList.get(key);
                if (initWork.isMainThread) {
                    mMainHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            initWork.initWork(application);
                            initWork.onInitFinish();
                        }
                    });
    
                } else {
                    mChildHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            initWork.initWork(application);
                            initWork.onInitFinish();
                        }
                    });
                }
            }
        }
    
        /**
         * 查询初始化状态
         * @param key 查询的key
         * @return
         */
        public boolean inquiryInitStatus(String key){
            if (mInitWorkList.containsKey(key)) {
                return mInitWorkList.get(key).getInitStatus();
            }
            return false;
        }
    
        public static class Build {
            private Map<String, InitWork> mInitWorkList = new HashMap<>();
    
            /**
             * 添加初始化工作
             *
             * @param key          key
             * @param isMainThread 是否是主线程初始化
             * @param initWork     初始化工作
             * @return
             */
            public Build addInitWork(String key, boolean isMainThread, InitWork initWork) {
                initWork.setMainThread(isMainThread);
                mInitWorkList.put(key, initWork);
                return this;
            }
    
    
            public InitHelp build() {
                return new InitHelp(mInitWorkList);
            }
        }
    
    
        public static abstract class InitWork {
            private boolean initStatus = false;//初始化状态  true初始化完成 false未初始化
            private boolean isMainThread = true;
    
            private void setMainThread(boolean mainThread) {
                isMainThread = mainThread;
            }
    
            /**
             * 实现初始化工作
             */
            abstract void initWork(Application application);
    
            /**
             * 初始化完成
             */
            public void onInitFinish() {
                initStatus = true;
            }
    
            /**
             * 获取初始化状态
             *
             * @return
             */
            public boolean getInitStatus() {
                return initStatus;
            }
        }
    
    
    }
  • 相关阅读:
    【codecombat】 试玩全攻略 第九关 循环又循环
    【codecombat】 试玩全攻略 第十三关 已知敌人
    【codecombat】 试玩全攻略 第十一关 再次迷宫经历
    【codecombat】 试玩全攻略 第六关 cell commentary
    【codecombat】 试玩全攻略 第八关 火舞
    【codecombat】 试玩全攻略 第十二关 恐惧之门
    【codecombat】 试玩全攻略 第十四关 已知敌人
    苹果apns推送总结
    Xcode 提升速度小技巧
    UITextField 限制输入字数
  • 原文地址:https://www.cnblogs.com/guanxinjing/p/14798847.html
Copyright © 2011-2022 走看看