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

Kotlin WorkManager使用方法詳解

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

WorkMananger的簡介

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

WorkManager的基本用法

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

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

WorkManager的基本用法其實非常簡單,主要分為以下3步:

  • 定義一個后臺任務,并實現(xiàn)具體的任務邏輯。
  • 配置該后臺任務的運行條件和約束信息,并構建后臺任務請求。
  • 將該后臺任務請求傳入WorkManager的enqueue()方法中,系統(tǒng)會在合適的時間運行。

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

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

第二步,配置后臺任務的運行條件和約束信息,代碼如下所示:

 //設置約束條件
 //NetworkType.CONNECTED 最通用的連上網(wǎng)絡
 //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()

最后一步,將構建出的后臺任務請求傳入WorkManager的enqueue()方法中,系統(tǒng)就會在合適的時間去運行了,代碼如下所示:

WorkManager.getInstance(context).enqueue(request)

使用WorkManager處理復雜的任務

(1)讓后臺任務在指定的推遲時間后運行

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

(2)給后臺任務請求添加標簽

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

(3)通過標簽來取消后臺任務請求

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

(4)即使沒有標簽,也可以通過id來取消后臺任務請求

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

(5) 一次性取消所有后臺任務請求

WorkManager.getInstance(this).cancelAllWork()

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

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

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

(7)doWork方法中返回Result.success()和Result.failure()又有什么作用?這兩個返回值其實就是用于通知任務運行結果的,我們可以使用如下代碼對后臺任務的運行結果進行監(jiān)聽:

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")
    }
}

鏈式任務

假如這里定義了3個獨立的后臺任務:同步數(shù)據(jù),壓縮數(shù)據(jù)和上傳數(shù)據(jù)。現(xiàn)在我們想要實現(xiàn)先同步,再壓縮,最后上傳的功能,就可以借助鏈式任務來實現(xiàn)。

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

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

您可能感興趣的文章:

相關文章

  • Android進程間通信(IPC)機制Binder簡要介紹

    Android進程間通信(IPC)機制Binder簡要介紹

    本文主要介紹 Android進程間通信(IPC)機制Binder簡要介紹, 這里介紹了Binder機制如何實現(xiàn)進程通信機制,有研究Android源碼的朋友可以看下
    2016-08-08
  • Android shape標簽使用方法介紹

    Android shape標簽使用方法介紹

    shape算是我們常用的一個標簽,他可以生成線條,矩形, 圓形, 圓環(huán),像我們圓角的按鈕就可以通過shape來實現(xiàn),最終Android會把這個帶有shape標簽的圖片解析成一個Drawable對象,這個Drawable對象本質是GradientDrawable
    2022-09-09
  • Android View 事件分發(fā)機制詳解

    Android View 事件分發(fā)機制詳解

    本文主要介紹Android View 事件分發(fā)機制,這里整理了相關資料并詳細介紹了view分發(fā)機制的知識及簡單示例代碼,有興趣的小伙伴可以參考下
    2016-08-08
  • Android實現(xiàn)動態(tài)圓環(huán)的圖片頭像控件

    Android實現(xiàn)動態(tài)圓環(huán)的圖片頭像控件

    這篇文章主要為大家詳細介紹了Android實現(xiàn)帶有動態(tài)圓環(huán)的圓形圖片控件DynamicAvatarView的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 談談Android里的Context的使用實例

    談談Android里的Context的使用實例

    這篇文章主要介紹了談談Android里的Context的使用實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • flutter直接上傳文件到阿里云oss

    flutter直接上傳文件到阿里云oss

    上傳視頻到oss,之前是走后端上傳到oss,會有一個問題就是我要先上傳給后端,后端再上傳給oss就會導致上傳多次,消耗時間過長影響用戶體驗,所以我參考文檔寫了直接上傳到阿里云oss獲取到文件訪問路徑。
    2021-05-05
  • Android集成百度地圖開發(fā)流程和注意事項

    Android集成百度地圖開發(fā)流程和注意事項

    現(xiàn)在很多項目都需要集成百度地圖,所以就把自己做過一個項目的經(jīng)驗寫出來和大家分享,方便自己和大家使用的時候參考借鑒,下面就來一起看看Android集成百度地圖開發(fā)流程和注意事項吧。
    2016-09-09
  • Android中退出確認框的實現(xiàn)代碼

    Android中退出確認框的實現(xiàn)代碼

    這篇文章主要介紹了Android中退出確認框的實現(xiàn)代碼的相關資料,需要的朋友可以參考下
    2017-05-05
  • Android 屏幕切換監(jiān)聽的實例代碼

    Android 屏幕切換監(jiān)聽的實例代碼

    我試著在屏幕切換時,使View顯示在不同的位置,在網(wǎng)上搜索了一些資料,自己做了一段時間,終于完成了功能,今天小編給大家分享android 屏幕切換監(jiān)聽的實例代碼,需要的的朋友參考下吧
    2017-01-01
  • Android自定義流式布局實現(xiàn)淘寶搜索記錄

    Android自定義流式布局實現(xiàn)淘寶搜索記錄

    這篇文章主要為大家詳細介紹了Android自定義流式布局實現(xiàn)淘寶搜索記錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10

最新評論

哈尔滨市| 理塘县| 莱州市| 漳平市| 海盐县| 公安县| 昌黎县| 阿拉尔市| 无棣县| 晋州市| 巴楚县| 德阳市| 晋江市| 阿拉善盟| 同仁县| 安徽省| 兰西县| 马边| 鞍山市| 磐石市| 江永县| 商丘市| 西和县| 和硕县| 松溪县| 聂荣县| 麻江县| 斗六市| 铅山县| 凤庆县| 孟连| 株洲县| 独山县| 黑龙江省| 博湖县| 余姚市| 邯郸市| 东台市| 东乡| 布尔津县| 吕梁市|