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;
        }
    }


}
原文地址:https://www.cnblogs.com/guanxinjing/p/14798847.html