亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Kotlin WorkManager使用方法詳解

 更新時(shí)間:2023年01月20日 11:25:08   作者:Hdnw  
這篇文章主要介紹了Kotlin WorkManager使用方法,WorkManager是 安卓體系結(jié)構(gòu)之一,也是Android JetPack的一部分。WorkManager用于可延期并需要保證執(zhí)行的后臺(tái)工作

WorkMananger的簡(jiǎn)介

Google推出WorkManager組件,WorkManager很適合用于處理一些要求定時(shí)執(zhí)行的任務(wù),它可以根據(jù)操作系統(tǒng)的版本自動(dòng)選擇底層是使用AlarmManager實(shí)現(xiàn)還是JobScheduler實(shí)現(xiàn),從而降低了我們的使用成本。另外,它還支持周期性任務(wù),鏈?zhǔn)饺蝿?wù)處理等功能,是一個(gè)非常強(qiáng)大的工具。

WorkManager的基本用法

在app/build.gradle文件添加依賴

 implementation "androidx.work:work-runtime:2.7.1"

WorkManager的基本用法其實(shí)非常簡(jiǎn)單,主要分為以下3步:

  • 定義一個(gè)后臺(tái)任務(wù),并實(shí)現(xiàn)具體的任務(wù)邏輯。
  • 配置該后臺(tái)任務(wù)的運(yùn)行條件和約束信息,并構(gòu)建后臺(tái)任務(wù)請(qǐng)求。
  • 將該后臺(tái)任務(wù)請(qǐng)求傳入WorkManager的enqueue()方法中,系統(tǒng)會(huì)在合適的時(shí)間運(yùn)行。

第一步要定義一個(gè)后臺(tái)任務(wù),這里創(chuàng)建一個(gè)SimpleWorker類,代碼如下所示:

class SimpleWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        Log.d("SimpleWorker", "do work in SimpleWorker")
        return Result.success()
    }
}

第二步,配置后臺(tái)任務(wù)的運(yùn)行條件和約束信息,代碼如下所示:

 //設(shè)置約束條件
 //NetworkType.CONNECTED 最通用的連上網(wǎng)絡(luò)
 //NetworkType.UNMETERED  WF
 //NetworkType.METERED 流量,4G
  val constraints: Constraints =Constraints.Builder()
       .setRequiredNetworkType(NetworkType.CONNECTED)
       .build()
  val request=OneTimeWorkRequest.Builder(SimpleWorker::class.java)
        .setConstraints(constraints)
        .build()

最后一步,將構(gòu)建出的后臺(tái)任務(wù)請(qǐng)求傳入WorkManager的enqueue()方法中,系統(tǒng)就會(huì)在合適的時(shí)間去運(yùn)行了,代碼如下所示:

WorkManager.getInstance(context).enqueue(request)

使用WorkManager處理復(fù)雜的任務(wù)

(1)讓后臺(tái)任務(wù)在指定的推遲時(shí)間后運(yùn)行

val request=OneTimeWorkRequest.Builder(SimpleWorker::class.java)
                .setInitialDelay(5,TimeUnit.MINUTES)
                .build()

(2)給后臺(tái)任務(wù)請(qǐng)求添加標(biāo)簽

val request=OneTimeWorkRequest.Builder(SimpleWorker::class.java)
                ...
                .addTag("simple")
                .build()

(3)通過(guò)標(biāo)簽來(lái)取消后臺(tái)任務(wù)請(qǐng)求

WorkManager.getInstance(this).cancelAllWorkByTag("simple")

(4)即使沒(méi)有標(biāo)簽,也可以通過(guò)id來(lái)取消后臺(tái)任務(wù)請(qǐng)求

WorkManager.getInstance(this).cancelAllWorkById(request.id)

(5) 一次性取消所有后臺(tái)任務(wù)請(qǐng)求

WorkManager.getInstance(this).cancelAllWork()

(6)如果后臺(tái)任務(wù)的doWork()方法中返回了Result.retry(),那么是可以結(jié)合setBackoffCriteria()方法來(lái)重新執(zhí)行任務(wù)的。

setBackoffCriteria():第一個(gè)參數(shù)用于指定如果任務(wù)失敗再次執(zhí)行失敗,下次重試的時(shí)間應(yīng)該以什么樣的形式延遲,可選值有兩種:1.LINEAR,代表下次重試時(shí)間以線性的方式延遲。2.EXPONENTIAL,代表下次重試時(shí)間以指數(shù)的方式延遲。第二個(gè)參數(shù)和第三個(gè)參數(shù)用于指定在多久之后重新執(zhí)行任務(wù),時(shí)間最短不能少于10秒鐘。

val request=OneTimeWorkRequest.Builder(SimpleWorker::class.java)
                ...
                .setBackoffCriteria(BackoffPolicy.LINEAR,10,TimeUnit.SECONDS)
                .build()

(7)doWork方法中返回Result.success()和Result.failure()又有什么作用?這兩個(gè)返回值其實(shí)就是用于通知任務(wù)運(yùn)行結(jié)果的,我們可以使用如下代碼對(duì)后臺(tái)任務(wù)的運(yùn)行結(jié)果進(jìn)行監(jiān)聽(tīng):

WorkManager.getInstance(this).getWorkInfoByIdLiveData(request.id).observer(this){workInfo->
    if(workInfo.state==WorkInfo.State.SUCCEEDED){
        Log.d("MainActivity","do work succeeded")
    }else if(workInfo.state==WorkInfo.State.FAILED){
         Log.d("MainActivity","do work failed")
    }
}

鏈?zhǔn)饺蝿?wù)

假如這里定義了3個(gè)獨(dú)立的后臺(tái)任務(wù):同步數(shù)據(jù),壓縮數(shù)據(jù)和上傳數(shù)據(jù)?,F(xiàn)在我們想要實(shí)現(xiàn)先同步,再壓縮,最后上傳的功能,就可以借助鏈?zhǔn)饺蝿?wù)來(lái)實(shí)現(xiàn)。

val sync=...
val compress=...
val upload=...
WorkManager.getInstance(this)
   .beginWith(sync)
   .then(compress)
   .then(upload)
   .enqueue()

到此這篇關(guān)于Kotlin WorkManager使用方法詳解的文章就介紹到這了,更多相關(guān)Kotlin WorkManager內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android自定義Animation實(shí)現(xiàn)View搖擺效果

    Android自定義Animation實(shí)現(xiàn)View搖擺效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義Animation實(shí)現(xiàn)View搖擺效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android WiFi熱點(diǎn)開(kāi)發(fā)的示例代碼

    Android WiFi熱點(diǎn)開(kāi)發(fā)的示例代碼

    這篇文章主要介紹了Android WiFi熱點(diǎn)開(kāi)發(fā)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Android RecycleView使用(CheckBox全選、反選、單選)

    Android RecycleView使用(CheckBox全選、反選、單選)

    這篇文章主要為大家詳細(xì)介紹了Android RecycleView使用,CheckBox全選、反選、單選效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Android源碼學(xué)習(xí)之組合模式定義及應(yīng)用

    Android源碼學(xué)習(xí)之組合模式定義及應(yīng)用

    將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性,需要了解的朋友可以參考下
    2013-01-01
  • Android 清除SharedPreferences 產(chǎn)生的數(shù)據(jù)(實(shí)例代碼)

    Android 清除SharedPreferences 產(chǎn)生的數(shù)據(jù)(實(shí)例代碼)

    項(xiàng)目是要保存上次文件播放的位置,我使用SharedPreferences來(lái)保存,鍵值對(duì)分別是文件路徑和當(dāng)時(shí)播放的位置
    2013-11-11
  • Android實(shí)現(xiàn)文件的分割和組裝

    Android實(shí)現(xiàn)文件的分割和組裝

    這篇文章主要介紹了Android實(shí)現(xiàn)文件的分割和組裝,針對(duì)UDP大數(shù)據(jù)包的分割傳輸與組裝有著非常實(shí)用的價(jià)值,需要的朋友可以參考下
    2014-09-09
  • Android獲取文字高度的三種方法

    Android獲取文字高度的三種方法

    這篇文章主要給大家介紹了Android獲取文字高度的三種方法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Android?嵌套?Intent?隱患及解決方案

    Android?嵌套?Intent?隱患及解決方案

    這篇文章主要介紹了Android嵌套Intent隱患及解決方案,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可以參考一下
    2022-05-05
  • Android實(shí)現(xiàn)簡(jiǎn)單的答題系統(tǒng)

    Android實(shí)現(xiàn)簡(jiǎn)單的答題系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)單的答題系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Android PhotoView使用步驟實(shí)例詳解

    Android PhotoView使用步驟實(shí)例詳解

    這篇文章主要介紹了Android PhotoView使用步驟實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評(píng)論