色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Kotlin + Flow 實現(xiàn)Android 應(yīng)用初始化任務(wù)啟動庫

瀏覽:3日期:2022-09-20 10:19:09
特性

Kotlin + Flow 實現(xiàn)的 Android 應(yīng)用初始化任務(wù)啟動庫。

支持模塊化,按模塊加載任務(wù) 可指定工作進(jìn)程名稱,main 表示僅在主進(jìn)程運(yùn)行,all 表示在所有進(jìn)程運(yùn)行,默認(rèn)值all 可指定任務(wù)僅在工作線程執(zhí)行 可指定任務(wù)僅在調(diào)試模式執(zhí)行 可指定任務(wù)在滿足合規(guī)條件后執(zhí)行 可指定任務(wù)優(yōu)先級,決定同模塊內(nèi)無依賴同步任務(wù)的執(zhí)行順序 可指定依賴任務(wù)列表,能檢測循環(huán)依賴 使用 Flow 調(diào)度任務(wù) 僅200多行代碼,簡單明了 有耗時統(tǒng)計 引入依賴

項目地址:github.com/czy1121/ini…

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 調(diào)用 InitManager.init() implementation 'me.reezy.init:init-startup:0.9.0' }使用

在 AndroidManifest.xml 的 <application> 里添加模塊

<meta-data android:name='modules' android:value='app' />

通過注解 @Init 和 InitTask 接口定義一個任務(wù)

@Initclass OneInit : InitTask { override fun execute(app: Application) { Log.e(TAG, 'this is ${javaClass.simpleName} in ${Thread.currentThread().name}') }}

通過注解 @Init 的參數(shù)配置任務(wù)信息

@Target(AnnotationTarget.CLASS)@Retention(AnnotationRetention.SOURCE)annotation class Init( val process: String = 'all', // 指定工作進(jìn)程名稱,main 表示僅在主進(jìn)程運(yùn)行,all 表示在所有進(jìn)程運(yùn)行 val background: Boolean = false, // 是否在工作線程執(zhí)行任務(wù) val debugOnly: Boolean = false, // 是否僅在 DEBUG 模式執(zhí)行任務(wù) val compliance: Boolean = false, // 是否需要合規(guī)執(zhí)行 val depends: Array<String> = [], // 依賴的任務(wù)列表 val priority: Short = 0 // )

APT會按模塊收集任務(wù)信息并生成任務(wù)加載器(InitLoader_$moduleName),任務(wù)加載器用于添加任務(wù)到TaskList

class Task( val name: String, // APT收集的任務(wù)名稱格式為 '$moduleName:${clazz.simpleName}' val background: Boolean = false, // 是否在工作線程執(zhí)行任務(wù) val priority: Int = 0, // 進(jìn)程運(yùn)行的優(yōu)先級,值小的先執(zhí)行 val depends: Set<String> = setOf(), // 依賴的任務(wù)列表,同模塊只需指定'${clazz.simpleName}',跨模塊需要指定 '$moduleName:${clazz.simpleName}' val block: () -> Unit = {}, // 待執(zhí)行的任務(wù)) { val children: MutableSet<Task> = mutableSetOf() // 子任務(wù)列表}

核心類

TaskList 負(fù)責(zé)持有和添加任務(wù) TaskManager 負(fù)責(zé)調(diào)度任務(wù),支持添加開關(guān)任務(wù)(沒有業(yè)務(wù)僅作為開關(guān),可手動觸發(fā)完成,并償試執(zhí)行其子任務(wù))

無依賴的異步任務(wù),在子線程并行執(zhí)行無依賴的同步任務(wù),在主線程順序執(zhí)行有依賴的任務(wù),確保無循環(huán)依賴,且被依賴的任務(wù)先執(zhí)行

InitManager 負(fù)責(zé)找到各模塊的任務(wù)加載器并開始啟動初始化,它使用了一個合規(guī)開關(guān)來使相關(guān)任務(wù)在確定合規(guī)后執(zhí)行

可以不使用 InitManager 收集任務(wù)

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()// ...// 完成開關(guān)任務(wù)t1manager.trigger('t1')

以上就是Kotlin + Flow 實現(xiàn)Android 應(yīng)用初始化任務(wù)啟動庫的詳細(xì)內(nèi)容,更多關(guān)于實現(xiàn)Android 應(yīng)用初始化任務(wù)啟動庫的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 免费高清不卡毛片在线看 | 国产精品二区页在线播放 | 亚洲韩精品欧美一区二区三区 | 国产精品无圣光一区二区 | 欧美精品在欧美一区二区 | 偷自拍 | 国产成人精品精品欧美 | 国产精品午夜免费观看网站 | 久草在线国产 | 亚洲欧美一区二区三区久久 | 岛国片欧美一级毛片 | 自拍1页 | 中文字幕一区二区三 | 污全彩肉肉无遮挡彩色 | 国产成a人亚洲精v品久久网 | 人成精品| 玖玖精品在线观看 | 手机毛片在线 | 美女张开腿给人网站 | 男人的天堂欧美 | 日韩精品网址 | 国产日韩欧美 | 一级毛片日韩 | 日本精品久久久久久久久免费 | 久久亚洲精品中文字幕三区 | 中国农村一级毛片 | 国产精品深爱在线 | 日韩一级在线播放免费观看 | 大陆高清自拍 | 欧美精品一区二区在线观看 | 欧美在线一二三区 | 国产成人a毛片在线 | a级片在线观看免费 | 亚洲免费看片 | 国产91在线 | 亚洲 | 中文字幕成人免费高清在线视频 | 欧美色穴 | 日本精品一在线观看视频 | 欧美日韩大片 | 怡红院成人在线 | 欧美日韩人成在线观看 |