如何提高 ARouter 的初始化速度
在 app module 的 build.gradle 中 加入:
apply plugin: 'com.alibaba.arouter'
在项目的 build.gradle中加入:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "com.alibaba:arouter-register:1.0.2"
}
}
我的在 华为 P40 上面能够提高800毫秒,在 荣耀10上提高1.1秒
二、为什么使用插件能够提高启动速度呢?
来看看初始化的代码:
public static void init(Application application) {
if (!hasInit) {
logger = _ARouter.logger;
_ARouter.logger.info(Consts.TAG, "ARouter init start.");
hasInit = _ARouter.init(application);
if (hasInit) {
_ARouter.afterInit();
}
_ARouter.logger.info(Consts.TAG, "ARouter init over.");
}
}
真正实现的在 _ARouter.init(application)中,如下:
protected static synchronized boolean init(Application application) {
mContext = application;
LogisticsCenter.init(mContext, executor);
logger.info(Consts.TAG, "ARouter init success!");
hasInit = true;
mHandler = new Handler(Looper.getMainLooper());
return true;
}
可以看到是在 LogisticsCenter.init(mContext, executor) 真正实现的:
public synchronized static void init(Context context, ThreadPoolExecutor tpe) throws HandlerException {
mContext = context;
executor = tpe;
try {
long startInit = System.currentTimeMillis();
//billy.qi modified at 2017-12-06
//load by plugin first
// 是否使用了插件,如果使用了,那么 registerByPlugin = true,后续的就不会执行了。
loadRouterMap();
if (registerByPlugin) {
logger.info(TAG, "Load router map by arouter-auto-register plugin.");
} else {
Set;
// debug模式或者是最新版本的话每次都会重建路由表,否则从SP中读取路由表