麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 系統(tǒng) > Android > 正文

如何在WorkManager中處理異步任務(wù)詳解

2019-10-21 21:25:24
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

WorkManager 是 Android Jetpack 中的新組件,用于負(fù)責(zé)管理后臺(tái)任務(wù)。關(guān)于這個(gè)組件的介紹就不多說(shuō)了,網(wǎng)上到處都是,這里分享一下在 WorkManager 中處理異步任務(wù)的方法。

我們知道,在 WorkManager 中,處理任務(wù)的方式是創(chuàng)建一個(gè)繼承自 Worker 的任務(wù)類,實(shí)現(xiàn) doWork() 方法,并在這個(gè)方法中實(shí)現(xiàn)我們自己的任務(wù),然后返回 Result.success() 或 Result.failure() 來(lái)表示任務(wù)執(zhí)行成功或者失敗。在這里, doWork() 方法中的任務(wù)應(yīng)該是同步的,這是很自然的,因?yàn)?doWork() 方法本身就是在子線程中執(zhí)行,因此可以在 doWork() 方法中同步執(zhí)行耗時(shí)操作。

但是些情況,我們想要執(zhí)行的是異步任務(wù),在 WorkManager 中,有兩種比較好的處理異步任務(wù)的方案。

RxWorker

很多時(shí)候我們會(huì)使用 RxJava 來(lái)處理數(shù)據(jù)。幸運(yùn)的是,我們可以使用 RxWorker 來(lái)處理異步任務(wù)。

dependencies { ... implementation "android.arch.work:work-runtime:1.0.0-beta05" implementation "android.arch.work:work-rxjava2:1.0.0-beta05"}

然后,將之前集成 Work 的類改為繼承 RxWorker ,然后實(shí)現(xiàn) createWork() 方法,基本結(jié)構(gòu)如下:

public class AsyncWorker extends RxWorker { public AsyncWorker(Context appContext, WorkerParameters workerParams) {  super(appContext, workerParams); } @Override public Single<Result> createWork() {  return remoteService.getMySingleResponse()    .doOnSuccess(new Consumer() {     @Override     public void accept(Object object) throws Exception {      // 處理任務(wù)     }    })    .map(new Function() {     @Override     public Object apply(Object object) throws Exception {      return Result.success();     }    })    .onErrorReturn(new Function() {     @Override     public Object apply(Object object) throws Exception {      return Result.failure();     }    }); }}

很簡(jiǎn)單是吧?有一點(diǎn)要注意的是, createWork() 方法默認(rèn)是在主線程中執(zhí)行的,如果 10 分鐘沒(méi)有結(jié)束任務(wù),就會(huì)自動(dòng)取消。

ListenableWorker

當(dāng)我們?nèi)ゲ榭?RxWorker 的源碼時(shí),就可以發(fā)現(xiàn)它是繼承了 ListenableWorker 類,其實(shí) Worker 也是通過(guò)繼承 ListenableWorker 實(shí)現(xiàn)的。 因此,我們可以通過(guò)自定義 ListenableWorker 來(lái)實(shí)現(xiàn)相同的功能。

看一下 Worker 的源碼,很簡(jiǎn)單:

public abstract class Worker extends ListenableWorker { SettableFuture<Result> mFuture; public Worker(@NonNull Context context, @NonNull WorkerParameters workerParams) {  super(context, workerParams); } @WorkerThread public abstract @NonNull Result doWork(); @Override public final @NonNull ListenableFuture<Result> startWork() {  mFuture = SettableFuture.create();  getBackgroundExecutor().execute(new Runnable() {   @Override   public void run() {    Result result = doWork();    mFuture.set(result);   }  });  return mFuture; }}

可以里面主要使用了 SettableFuture 這個(gè)類,在 startWork() 里面先創(chuàng)建了 SettableFuture 對(duì)象,然后開(kāi)了一個(gè)子線程,在子線程里面執(zhí)行 doWork() 方法,完了就使用 mFuture.set() 方法將 Result 返回。

因此我們也可以模仿 Worker 類的寫法,來(lái)實(shí)現(xiàn)自己的異步處理,簡(jiǎn)單地模板代碼如下:

public class AsyncWorker extends ListenableWorker { private SettableFuture<Result> mFuture; public AsyncWorker(Context appContext,WorkerParameters workerParams) {  super(appContext, workerParams); } @Override public ListenableFuture<Result> startWork() {  mFuture = SettableFuture.create();  doSomeAsyncWork(new AsyncListener() {   @Override   public void success() {    mFuture.set(Result.success());   }      @Override   public void fail() {    mFuture.set(Result.failure());   }  });  return mFuture; }}

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 狠狠干视频网站 | 国产免费让你躁在线视频 | 国产乱淫a∨片免费视频 | sese在线视频 | 国产精品久久久久国产精品三级 | 欧美女孩videos | 中文字幕免费看 | 午夜视频观看 | 羞羞答答tv | 久久国产精品二国产精品中国洋人 | 91精品国啪老师啪 | 久久精品久久精品久久精品 | 成人一区二区三区在线 | 免费在线观看毛片视频 | 啪啪毛片 | 欧美一区二区三区中文字幕 | 欧美一级一区二区三区 | 中文字幕在线观看视频一区 | 日本在线播放一区二区 | 国产成人强伦免费视频网站 | 一区二区三区播放 | 亚洲操比视频 | 黄色免费在线视频网站 | 亚洲精华液久久含羞草 | 91精品国产综合久久久欧美 | 日日噜噜噜噜久久久精品毛片 | 一级做a爱视频 | 91网址在线观看 | 日韩一级片黄色 | 一分钟免费观看完整版电影 | 亚洲生活片 | 亚洲码无人客一区二区三区 | 日本精品视频一区二区三区四区 | av色在线观看 | 中文字幕欧美专区 | 国产激情视频在线 | 成熟女人特级毛片www免费 | 日韩美香港a一级毛片免费 日韩激情 | 91午夜在线观看 | 久草在线资源观看 | 国产精品成人免费一区久久羞羞 |