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