diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/BaseApplication.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/BaseApplication.kt index 9632b32..5902eb7 100644 --- a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/BaseApplication.kt +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/BaseApplication.kt @@ -51,13 +51,6 @@ open class BaseApplication : MultiDexApplication() { /** * 初始化第三方依赖 - * - * 步骤: - * * 1. 首先开启一个后台协程对不会立即使用的第三方进行初始化 - * * 2. 对需要被立即使用的第三方进行初始化 - * * 2.1 首先是并行对非必须要在主线程初始化的依赖进行初始化 此时不用管初始化是否完成 紧接着进行下一步 - * * 2.2 对必须要在主线程初始化的依赖进行初始化 由于是在主线程 所以后面的操作等待初始化完成 这部分时间不能浪费掉 这就是为什么先并行初始化非主线程的 因为这部分时间会被利用上 - * * 2.3 等待所有并行初始化的job完成就结束了整个初始化过程 */ private fun initDepends() { // 开启一个 Default Coroutine 进行初始化不会立即使用的第三方 @@ -65,31 +58,16 @@ open class BaseApplication : MultiDexApplication() { mLoadModuleProxy.initByBackstage() } - // 初始化需要被立即初始化的第三方 多线程并行,并阻塞至全部完成 - val measureTimeMillis = measureTimeMillis { - mCoroutineScope.launch(Dispatchers.Main.immediate) { - val depends = mLoadModuleProxy.initByFrontDesk() - - // 1. 对非必须在主线程初始化的第三方依赖发起并行初始化 - // 并行job - var jobs: MutableList>? = null - if (depends.workerThreadDepends.isNotEmpty()) { - jobs = mutableListOf() - depends.workerThreadDepends.forEach { - jobs.add(async(Dispatchers.Default) { it() }) - } - } - - // 2. 对必须在主线程初始化的第三方依赖进行初始化 - if (depends.mainThreadDepends.isNotEmpty()) { - depends.mainThreadDepends.forEach { it() } - } - - // 3. 等待每一个子线程初始化的依赖完成 - jobs?.forEach { it.await() } + // 前台初始化 + val allTimeMillis = measureTimeMillis { + val depends = mLoadModuleProxy.initByFrontDesk() + var dependInfo: String + depends.forEach { + val dependTimeMillis = measureTimeMillis { dependInfo = it() } + Log.d("BaseApplication", "initDepends: $dependInfo : $dependTimeMillis ms") } } - Log.d("ApplicationInit", "初始化完成 $measureTimeMillis ms") + Log.d("BaseApplication", "初始化完成 $allTimeMillis ms") } override fun onTerminate() { diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/app/ApplicationLifecycle.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/app/ApplicationLifecycle.kt index 4b0f224..2a27791 100644 --- a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/app/ApplicationLifecycle.kt +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/app/ApplicationLifecycle.kt @@ -30,11 +30,10 @@ interface ApplicationLifecycle { fun onTerminate(application: Application) /** - * 需要立即进行初始化的放在这里进行并行初始化 - * 需要必须在主线程初始化的放在[InitDepend.mainThreadDepends],反之放在[InitDepend.workerThreadDepends] - * @return InitDepend 初始化方法集合 + * 主线程前台初始化 + * @return MutableList<() -> String> 初始化方法集合 */ - fun initByFrontDesk(): InitDepend + fun initByFrontDesk(): MutableList<() -> String> /** * 不需要立即初始化的放在这里进行后台初始化 diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/app/InitDepend.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/app/InitDepend.kt deleted file mode 100644 index 50798b5..0000000 --- a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/app/InitDepend.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.quyunshuo.androidbaseframemvvm.base.app - -/** - * 需要立即进行初始化的依赖列表 有的依赖可能必须要在主线程进行初始化,就放在[mainThreadDepends]里面就可以 - * 其余的非必须要在主线程进行初始化的放在[workerThreadDepends]里面,这部分依赖会被后台线程并行初始化 - * - * @property mainThreadDepends MutableList<() -> String> 必须要在主线程初始化的依赖 - * @property workerThreadDepends MutableList<() -> String> 非必须要在主线程初始化的依赖 - * - * @author Qu Yunshuo - * @since 4/24/21 5:20 PM - */ -data class InitDepend( - val mainThreadDepends: MutableList<() -> String>, - val workerThreadDepends: MutableList<() -> String> -) \ No newline at end of file diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/app/LoadModuleProxy.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/app/LoadModuleProxy.kt index 4b633ad..b17b5cc 100644 --- a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/app/LoadModuleProxy.kt +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/app/LoadModuleProxy.kt @@ -45,18 +45,13 @@ class LoadModuleProxy : ApplicationLifecycle { } /** - * 需要立即进行初始化的放在这里进行并行初始化 - * 需要必须在主线程初始化的放在[InitDepend.mainThreadDepends],反之放在[InitDepend.workerThreadDepends] - * @return InitDepend 初始化方法集合 + * 主线程前台初始化 + * @return MutableList<() -> String> 初始化方法集合 */ - override fun initByFrontDesk(): InitDepend { - val mainThreadDepends: MutableList<() -> String> = mutableListOf() - val workerThreadDepends: MutableList<() -> String> = mutableListOf() - mLoader.forEach { - mainThreadDepends.addAll(it.initByFrontDesk().mainThreadDepends) - workerThreadDepends.addAll(it.initByFrontDesk().workerThreadDepends) - } - return InitDepend(mainThreadDepends, workerThreadDepends) + override fun initByFrontDesk(): MutableList<() -> String> { + val list: MutableList<() -> String> = mutableListOf() + mLoader.forEach { list.addAll(it.initByFrontDesk()) } + return list } /** diff --git a/lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/CommonApplication.kt b/lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/CommonApplication.kt index 5bd20c7..08ef9c0 100644 --- a/lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/CommonApplication.kt +++ b/lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/CommonApplication.kt @@ -8,7 +8,6 @@ import com.alibaba.android.arouter.launcher.ARouter import com.google.auto.service.AutoService import com.quyunshuo.androidbaseframemvvm.base.app.ApplicationLifecycle import com.quyunshuo.androidbaseframemvvm.base.BaseApplication -import com.quyunshuo.androidbaseframemvvm.base.app.InitDepend import com.quyunshuo.androidbaseframemvvm.base.constant.VersionStatus import com.quyunshuo.androidbaseframemvvm.base.utils.ProcessUtils import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils @@ -54,21 +53,19 @@ class CommonApplication : ApplicationLifecycle { override fun onTerminate(application: Application) {} /** - * 需要立即进行初始化的放在这里进行并行初始化 - * 需要必须在主线程初始化的放在[InitDepend.mainThreadDepends],反之放在[InitDepend.workerThreadDepends] - * @return InitDepend 初始化方法集合 + * 主线程前台初始化 + * @return MutableList<() -> String> 初始化方法集合 */ - override fun initByFrontDesk(): InitDepend { - val worker = mutableListOf<() -> String>() - val main = mutableListOf<() -> String>() + override fun initByFrontDesk(): MutableList<() -> String> { + val list = mutableListOf<() -> String>() // 以下只需要在主进程当中初始化 按需要调整 if (ProcessUtils.isMainProcess(BaseApplication.context)) { - worker.add { initMMKV() } - worker.add { initARouter() } - main.add { initNetworkStateClient() } + list.add { initMMKV() } + list.add { initARouter() } + list.add { initNetworkStateClient() } } - worker.add { initTencentBugly() } - return InitDepend(main, worker) + list.add { initTencentBugly() } + return list } /**