欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

特性

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

  • 支持模塊化,按模塊加載任務(wù)
  • 可指定工作進(jìn)程名稱,main 表示僅在主進(jìn)程運行,all 表示在所有進(jì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ù)

@Init
class 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)程運行,all 表示在所有進(jì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ō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ù)t1
manager.trigger("t1")

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

相關(guān)文章

  • Android裁剪圖像實現(xiàn)方法示例

    Android裁剪圖像實現(xiàn)方法示例

    這篇文章主要介紹了Android裁剪圖像實現(xiàn)方法,結(jié)合完整實例形式分析了Android針對圖片的讀取、調(diào)用、裁剪、保存等操作實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • Android 自定義標(biāo)題欄的實例詳解

    Android 自定義標(biāo)題欄的實例詳解

    這篇文章主要介紹了 Android 自定義標(biāo)題欄的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣類似的功能,需要的朋友可以參考下
    2017-10-10
  • Android入門之LinearLayout、AbsoluteLayout的用法實例講解

    Android入門之LinearLayout、AbsoluteLayout的用法實例講解

    這篇文章主要介紹了Android入門之LinearLayout、AbsoluteLayout的用法,對于Android初學(xué)者有很好的參考借鑒價值,需要的朋友可以參考下
    2014-08-08
  • Android context源碼詳解及深入分析

    Android context源碼詳解及深入分析

    這篇文章主要介紹了Android context源碼詳解及深入分析的相關(guān)資料,這里對Android Context 如何使用進(jìn)行了詳細(xì)介紹,需要的朋友可以參考下
    2017-01-01
  • Flutter底部導(dǎo)航欄的實現(xiàn)方式

    Flutter底部導(dǎo)航欄的實現(xiàn)方式

    這篇文章主要為大家詳細(xì)介紹了Flutter底部導(dǎo)航欄的實現(xiàn)方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Flutter組件生命周期和App生命周期示例解析

    Flutter組件生命周期和App生命周期示例解析

    這篇文章主要為大家介紹了Flutter組件生命周期和App生命周期示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Android項目中引用本地aar文件的方法

    Android項目中引用本地aar文件的方法

    這篇文章主要介紹了Android項目中引用本地aar文件的方法,本文講解了什么是aar文件、導(dǎo)出aar文件方法、引用本地的aar文件方法等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Android中的Bitmap的詳細(xì)介紹

    Android中的Bitmap的詳細(xì)介紹

    本篇文章主要介紹了Android中的Bitmap,是Windows標(biāo)準(zhǔn)格式圖形文件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Flutter模仿實現(xiàn)微信底部導(dǎo)航欄流程詳解

    Flutter模仿實現(xiàn)微信底部導(dǎo)航欄流程詳解

    這篇文章主要介紹了Flutter模仿實現(xiàn)微信底部導(dǎo)航欄流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-05-05
  • Android Socket實現(xiàn)多個客戶端即時通信聊天

    Android Socket實現(xiàn)多個客戶端即時通信聊天

    這篇文章主要為大家詳細(xì)介紹了Android Socket實現(xiàn)多個客戶端即時通信聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論