如何使用WorkManager执行后台任务(下)

  • 时间:
  • 浏览:0
  • 来源:uu快3苹果版_uu快3单双_套路

你你这个 链式执行顺序是:子链 A->B 与子链 C->D 并行执行的, workA执行后再执行 workB,以及 workC执行后执行 workD ;有刚刚等待图片 workB以及 workD都执行完,最后执行 workE

最后,通过 WorkStatus获取返回值

在应用多多线程 开发中,可能性会多次把同一三个白 多链式任务加进去去到 WorkManager中,但希望只一三个白 多链式任务在执行,这刚刚 不会 使用唯一任务序列对链式任务指定出理 规则。假设,做一三个白 多下载文件操作,对一三个白 多文件下载链接,朋友不需用重复下载,只需用加进去去一次,上端再加进去去你你这个 任务,就忽略掉,可能性朋友不希望重复多次下载同一三个白 多文件。全都当加进去去一三个白 多同样名称为"download"操作任务时,对于唯一任务序列来说,不会 通过 ExistingWorkPolicy中的 REPLACEKEEPAPPEND,来指定加进去去的策略。

http://clmirror.storage.googleapis.com/codelabs/android-workmanager/index.html?index=..%2F..%2Findex#0

有刚刚,通过 WorkRequest传递参数

任务执行不会 传递参数以及获取到任务执行的结果。使用 WorkRequst.Builder.setInputData()土办法传递一三个白 多 Data对象,它是key-value形式的对象,使用 Data.Builder来创建。在 Worker类中不会 使用 Worker.getInputData()获取到参数。

还不会 通过 WorkContinuation.combine()土办法创建更加僵化 的链接任务调用序列。它不会 将一三个白 多 WorkContinuation对象合并,假设要调用如下的任务序列:

https://developer.android.com/topic/libraries/architecture/workmanager/advanced

使用 beginUniqueWork()土办法不会 创建任务序列,有刚刚不会 指定唯一的一三个白 多名称(name)。有刚刚再 ExistingWorkPolicy指定任务的替换策略

WorkManager.beginWith()土办法不会 传递多个 Worker对象,表示不会 并行执行的任务组,有刚刚再调用 then()土办法。当这并行任务组都执行完刚刚 才会执行接下来 then中的工作任务。

需用注意的是, WorkManager无法保证一三个白 多子链的执行顺序,有可能性 chain1chain2快,全部都不 可能性是 chain1chain2慢。

一三个白 多下载任务,在 Worker中获取传递过来的参数url,有刚刚执行下载,最后设置下载结果。

WorkManager会按照指定的顺序来执行 workAworkBworkC。可能性其中一三个白 多工作任务执行的刚刚 返回 Worker.Result.FAILURE,没法整个执行序列就会停止。

https://developer.android.com/reference/androidx/work/ExistingWorkPolicy

WorkManager在执行多个工作任务的刚刚 ,不会 指定执行顺序。假设一三个白 多应用多多线程 包含五个 OneTimeWorkRequest对象: workAworkBworkC。这有哪几个任务需用按照顺序执行,没法不会 使用 WorkManager.beginWith()土办法加入 workA,这刚刚 会返回一三个白 多 WorkContinuation对象,它定义了工作任务的执行序列。有刚刚通过它再调用 WorkContinuation.then()workBworkC加入到执行队列中,最后执行 WorkManager.enqueue()土办法。

同样地,在 Worker中不会 使用 Worker.setOutputData()设置一三个白 多 Data对象的返回值。要获取到你你这个 返回值就通过 LiveData<WorkStatus>

举个栗子:

在上一文中可能性了解到 WorkManager的基本用法刚刚 ,今天来看看它的有些高级用法: