Kotlin + Flow 實現(xiàn)Android 應用初始化任務啟動庫
特性
Kotlin + Flow 實現(xiàn)的 Android 應用初始化任務啟動庫。
- 支持模塊化,按模塊加載任務
- 可指定工作進程名稱,main 表示僅在主進程運行,all 表示在所有進程運行,默認值all
- 可指定任務僅在工作線程執(zhí)行
- 可指定任務僅在調試模式執(zhí)行
- 可指定任務在滿足合規(guī)條件后執(zhí)行
- 可指定任務優(yōu)先級,決定同模塊內無依賴同步任務的執(zhí)行順序
- 可指定依賴任務列表,能檢測循環(huán)依賴
- 使用 Flow 調度任務
- 僅200多行代碼,簡單明了
- 有耗時統(tǒng)計
引入依賴
repositories {
maven { url "https://gitee.com/ezy/repo/raw/android_public/"}
}
dependencies {
implementation "me.reezy.init:init:0.9.0"
kapt "me.reezy.init:init-compiler:0.9.0"
// 使用 init-startup 代替 init 可以利用 Jetpack Startup 庫自動初始化
// 無需在 Application.onCreate 調用 InitManager.init()
implementation "me.reezy.init:init-startup:0.9.0"
}
使用
在 AndroidManifest.xml 的 <application> 里添加模塊
<meta-data android:name="modules" android:value="app" />
通過注解 @Init 和 InitTask 接口定義一個任務
@Init
class OneInit : InitTask {
override fun execute(app: Application) {
Log.e(TAG, "this is ${javaClass.simpleName} in ${Thread.currentThread().name}")
}
}
通過注解 @Init 的參數(shù)配置任務信息
@Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.SOURCE) annotation class Init( val process: String = "all", // 指定工作進程名稱,main 表示僅在主進程運行,all 表示在所有進程運行 val background: Boolean = false, // 是否在工作線程執(zhí)行任務 val debugOnly: Boolean = false, // 是否僅在 DEBUG 模式執(zhí)行任務 val compliance: Boolean = false, // 是否需要合規(guī)執(zhí)行 val depends: Array<String> = [], // 依賴的任務列表 val priority: Short = 0 // )
APT會按模塊收集任務信息并生成任務加載器(InitLoader_$moduleName),任務加載器用于添加任務到TaskList
class Task(
val name: String, // APT收集的任務名稱格式為 "$moduleName:${clazz.simpleName}"
val background: Boolean = false, // 是否在工作線程執(zhí)行任務
val priority: Int = 0, // 進程運行的優(yōu)先級,值小的先執(zhí)行
val depends: Set<String> = setOf(), // 依賴的任務列表,同模塊只需指定"${clazz.simpleName}",跨模塊需要指定 "$moduleName:${clazz.simpleName}"
val block: () -> Unit = {}, // 待執(zhí)行的任務
) {
val children: MutableSet<Task> = mutableSetOf() // 子任務列表
}
核心類
- TaskList 負責持有和添加任務
- TaskManager 負責調度任務,支持添加開關任務(沒有業(yè)務僅作為開關,可手動觸發(fā)完成,并償試執(zhí)行其子任務)
無依賴的異步任務,在子線程并行執(zhí)行
無依賴的同步任務,在主線程順序執(zhí)行
有依賴的任務,確保無循環(huán)依賴,且被依賴的任務先執(zhí)行
- InitManager 負責找到各模塊的任務加載器并開始啟動初始化,它使用了一個合規(guī)開關來使相關任務在確定合規(guī)后執(zhí)行
可以不使用 InitManager 收集任務
val taskList = TaskList(app).apply {
add("task1") {
}
add("task2", depends = setOf("t1")) {
}
add("task3", depends = setOf("task1")) {
}
}
val manager = TaskManager(taskList, setOf("t1"))
manager.start()
// ...
// 完成開關任務t1
manager.trigger("t1")
以上就是Kotlin + Flow 實現(xiàn)Android 應用初始化任務啟動庫的詳細內容,更多關于實現(xiàn)Android 應用初始化任務啟動庫的資料請關注腳本之家其它相關文章!
相關文章
Flutter Recovering Stream Errors小技巧
這篇文章主要為大家介紹了Flutter Recovering Stream Errors小技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
Android中RecyclerView實現(xiàn)橫向滑動代碼
這篇文章主要介紹了Android中RecyclerView實現(xiàn)橫向滑動代碼的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07
通過FancyView提供 Android 酷炫的開屏動畫實例代碼
這篇文章主要介紹了通過FancyView提供 Android 酷炫的開屏動畫的實現(xiàn)代碼,需要的朋友可以參考下2017-12-12
Android實現(xiàn)讀寫JSON數(shù)據(jù)的方法
這篇文章主要介紹了Android實現(xiàn)讀寫JSON數(shù)據(jù)的方法,以完整實例形式分析了Android解析及生成json數(shù)據(jù)的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10
Android實現(xiàn)ImageView圖片縮放和拖動
這篇文章主要為大家詳細介紹了Android實現(xiàn)ImageView圖片縮放和拖動的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11

