最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年03月27日 09:48:04   作者:ezy  
這篇文章主要介紹了Kotlin + Flow 實(shí)現(xiàn)Android 應(yīng)用初始化任務(wù)啟動(dòng)庫(kù)的方法,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下

特性

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

  • 支持模塊化,按模塊加載任務(wù)
  • 可指定工作進(jìn)程名稱(chēng),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)先級(jí),決定同模塊內(nèi)無(wú)依賴(lài)同步任務(wù)的執(zhí)行順序
  • 可指定依賴(lài)任務(wù)列表,能檢測(cè)循環(huán)依賴(lài)
  • 使用 Flow 調(diào)度任務(wù)
  • 僅200多行代碼,簡(jiǎn)單明了
  • 有耗時(shí)統(tǒng)計(jì)

引入依賴(lài)

項(xià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 庫(kù)自動(dòng)初始化
  // 無(wú)需在 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" />

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

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

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

@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.SOURCE)
annotation class Init(
  val process: String = "all",    // 指定工作進(jìn)程名稱(chēng),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> = [],  // 依賴(lài)的任務(wù)列表
  val priority: Short = 0       // 
)

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

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

核心類(lèi)

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

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

  • InitManager 負(fù)責(zé)找到各模塊的任務(wù)加載器并開(kāi)始啟動(dòng)初始化,它使用了一個(gè)合規(guī)開(kāi)關(guān)來(lái)使相關(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()

// ...

// 完成開(kāi)關(guān)任務(wù)t1
manager.trigger("t1")

以上就是Kotlin + Flow 實(shí)現(xiàn)Android 應(yīng)用初始化任務(wù)啟動(dòng)庫(kù)的詳細(xì)內(nèi)容,更多關(guān)于實(shí)現(xiàn)Android 應(yīng)用初始化任務(wù)啟動(dòng)庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Flutter Recovering Stream Errors小技巧

    Flutter Recovering Stream Errors小技巧

    這篇文章主要為大家介紹了Flutter Recovering Stream Errors小技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 詳解Android單元測(cè)試最佳實(shí)踐

    詳解Android單元測(cè)試最佳實(shí)踐

    這篇文章主要介紹了詳解Android單元測(cè)試最佳實(shí)踐,本文介紹了如何對(duì)Android原生應(yīng)用進(jìn)行單元測(cè)試,同時(shí)示例代碼采用MVP模式以提高代碼的可讀性和可測(cè)試性
    2018-08-08
  • Android中RecyclerView實(shí)現(xiàn)橫向滑動(dòng)代碼

    Android中RecyclerView實(shí)現(xiàn)橫向滑動(dòng)代碼

    這篇文章主要介紹了Android中RecyclerView實(shí)現(xiàn)橫向滑動(dòng)代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • 通過(guò)FancyView提供 Android 酷炫的開(kāi)屏動(dòng)畫(huà)實(shí)例代碼

    通過(guò)FancyView提供 Android 酷炫的開(kāi)屏動(dòng)畫(huà)實(shí)例代碼

    這篇文章主要介紹了通過(guò)FancyView提供 Android 酷炫的開(kāi)屏動(dòng)畫(huà)的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-12-12
  • Android Studio使用小技巧:自定義Logcat

    Android Studio使用小技巧:自定義Logcat

    這篇文章主要介紹了Android Studio使用小技巧:自定義Logcat,本文講解如何自定義Logcat的顏色,實(shí)現(xiàn)區(qū)別verbose、debug、error等分類(lèi)信息,需要的朋友可以參考下
    2015-05-05
  • Android自定義View仿華為圓形加載進(jìn)度條

    Android自定義View仿華為圓形加載進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了Android自定義View仿華為圓形加載進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android實(shí)現(xiàn)讀寫(xiě)JSON數(shù)據(jù)的方法

    Android實(shí)現(xiàn)讀寫(xiě)JSON數(shù)據(jù)的方法

    這篇文章主要介紹了Android實(shí)現(xiàn)讀寫(xiě)JSON數(shù)據(jù)的方法,以完整實(shí)例形式分析了Android解析及生成json數(shù)據(jù)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Android實(shí)現(xiàn)ImageView圖片縮放和拖動(dòng)

    Android實(shí)現(xiàn)ImageView圖片縮放和拖動(dòng)

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)ImageView圖片縮放和拖動(dòng)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android RecyclerView使用方法詳解

    Android RecyclerView使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Android RecyclerView的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Android仿簡(jiǎn)書(shū)長(zhǎng)按文章生成圖片效果

    Android仿簡(jiǎn)書(shū)長(zhǎng)按文章生成圖片效果

    使用簡(jiǎn)書(shū)APP的同學(xué)都知道,簡(jiǎn)書(shū)有這樣一個(gè)功能;文章頁(yè)長(zhǎng)按內(nèi)容時(shí)底部會(huì)出現(xiàn)一個(gè) 生成圖片分享 的按鈕,點(diǎn)擊之后就可以將當(dāng)前的文章生成一張長(zhǎng)圖片;這張圖片可以保存到本地或分享給好友,同時(shí)還可為圖片設(shè)置成為白和黑兩種風(fēng)格,很有藝術(shù)范
    2017-03-03

最新評(píng)論

墨脱县| 遵义县| 威远县| 宁河县| 盐边县| 滦平县| 阿图什市| 渑池县| 云霄县| 望谟县| 黎平县| 望谟县| 邮箱| 天长市| 温泉县| 吴堡县| 全南县| 惠东县| 阿拉尔市| 错那县| 红河县| 天峨县| 嵊州市| 淮滨县| 姚安县| 万安县| 富源县| 且末县| 固阳县| 汤原县| 土默特左旗| 长沙市| 丁青县| 北海市| 梓潼县| 新乐市| 武隆县| 宁波市| 仪陇县| 太仆寺旗| 昌吉市|