亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

如何在WorkManager中處理異步任務詳解

2019-10-21 21:25:24
字體:
來源:轉載
供稿:網友

前言

WorkManager 是 Android Jetpack 中的新組件,用于負責管理后臺任務。關于這個組件的介紹就不多說了,網上到處都是,這里分享一下在 WorkManager 中處理異步任務的方法。

我們知道,在 WorkManager 中,處理任務的方式是創建一個繼承自 Worker 的任務類,實現 doWork() 方法,并在這個方法中實現我們自己的任務,然后返回 Result.success() 或 Result.failure() 來表示任務執行成功或者失敗。在這里, doWork() 方法中的任務應該是同步的,這是很自然的,因為 doWork() 方法本身就是在子線程中執行,因此可以在 doWork() 方法中同步執行耗時操作。

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

RxWorker

很多時候我們會使用 RxJava 來處理數據。幸運的是,我們可以使用 RxWorker 來處理異步任務。

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

然后,將之前集成 Work 的類改為繼承 RxWorker ,然后實現 createWork() 方法,基本結構如下:

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 {      // 處理任務     }    })    .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();     }    }); }}

很簡單是吧?有一點要注意的是, createWork() 方法默認是在主線程中執行的,如果 10 分鐘沒有結束任務,就會自動取消。

ListenableWorker

當我們去查看 RxWorker 的源碼時,就可以發現它是繼承了 ListenableWorker 類,其實 Worker 也是通過繼承 ListenableWorker 實現的。 因此,我們可以通過自定義 ListenableWorker 來實現相同的功能。

看一下 Worker 的源碼,很簡單:

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 這個類,在 startWork() 里面先創建了 SettableFuture 對象,然后開了一個子線程,在子線程里面執行 doWork() 方法,完了就使用 mFuture.set() 方法將 Result 返回。

因此我們也可以模仿 Worker 類的寫法,來實現自己的異步處理,簡單地模板代碼如下:

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; }}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久91精品| 亚洲国产精品久久久久秋霞蜜臀| 亚洲人成网在线播放| 日韩成人xxxx| 国产一区二区三区直播精品电影| 亚洲高清福利视频| 久久五月天色综合| 欧美亚洲国产精品| 岛国视频午夜一区免费在线观看| 一道本无吗dⅴd在线播放一区| 98精品国产自产在线观看| 欧美亚洲第一区| 92看片淫黄大片看国产片| 久久91精品国产91久久久| 亚洲片国产一区一级在线观看| 欧美国产第二页| 日本视频久久久| 福利微拍一区二区| 国产欧美日韩亚洲精品| 精品久久久久久久大神国产| 精品一区二区三区四区在线| 97国产在线视频| 2019中文字幕全在线观看| 91影院在线免费观看视频| 亚洲第一免费网站| 欧美床上激情在线观看| 亚洲区中文字幕| 日韩精品在线观| 久久亚洲私人国产精品va| 欧美性猛交xxxx免费看漫画| 亚洲精品永久免费| 91精品久久久久久久久久入口| 69久久夜色精品国产69乱青草| 国产成人精品视频在线| 色诱女教师一区二区三区| 深夜福利日韩在线看| 91亚洲精品在线观看| 国产在线视频欧美| 欧美午夜精品在线| 精品久久中文字幕久久av| 91黑丝高跟在线| 欧美日韩999| 国产精品美女久久久久久免费| 欧美性高潮在线| 亚洲精品自拍第一页| 久久精品亚洲一区| 国产精品丝袜高跟| 欧美成人亚洲成人日韩成人| 性色av一区二区三区红粉影视| 欧美日韩成人网| 久久99国产精品自在自在app| 久久久最新网址| 国内外成人免费激情在线视频网站| 综合国产在线视频| 欧美激情免费看| 亚洲香蕉成人av网站在线观看| 色综合久综合久久综合久鬼88| 国产脚交av在线一区二区| 欧美激情亚洲综合一区| 国产成人av在线播放| 久久久精品网站| 日韩亚洲第一页| 国产视频综合在线| 欧美日韩国产在线| 91精品国产91久久| 国产午夜精品视频免费不卡69堂| 亚洲精品自拍第一页| 国产成人一区二区在线| 精品调教chinesegay| 国产91色在线|免| 国产噜噜噜噜久久久久久久久| 久久久免费电影| 91福利视频在线观看| 91中文字幕在线观看| 欧美日产国产成人免费图片| 狠狠色狠狠色综合日日小说| 日韩免费观看网站| 欧美电影在线观看网站| 一道本无吗dⅴd在线播放一区| 国产精品福利小视频| 久久综合久中文字幕青草| 精品动漫一区二区三区| 精品二区三区线观看| 欧美成人高清视频| 欧美日韩免费观看中文| 不卡av在线网站| 久久久久久这里只有精品| 国产精品午夜一区二区欲梦| 国产成人中文字幕| 色综合视频一区中文字幕| 国产午夜精品美女视频明星a级| 欧美性色19p| 国产精品偷伦一区二区| 精品调教chinesegay| 欧美亚洲成人免费| 欧美精品18videos性欧美| 国产成人福利夜色影视| 欧美精品少妇videofree| 欧美极品xxxx| zzijzzij亚洲日本成熟少妇| 78m国产成人精品视频| 亚洲欧美日韩一区二区三区在线| 91久久精品国产91久久性色| 日韩欧亚中文在线| 久久久久久国产精品美女| 欧美精品第一页在线播放| 欧美xxxx14xxxxx性爽| 欧美成人四级hd版| 国产成人91久久精品| 中文字幕一区二区精品| 欧美在线视频一二三| 91在线观看免费观看| 国产日韩在线一区| 亚洲摸下面视频| 欧美性在线观看| 欧美电影免费观看网站| www国产精品视频| 欧美美女18p| 国产精品日韩欧美大师| 日韩大片在线观看视频| 久热99视频在线观看| 亚洲欧美三级在线| 久久99国产综合精品女同| 另类视频在线观看| 韩国日本不卡在线| 久久综合久久八八| 国产一区二区日韩精品欧美精品| 欧美电影免费看| 精品福利视频导航| 国产精品海角社区在线观看| 国产精品久久77777| 98午夜经典影视| 日韩第一页在线| 欧美成人在线免费视频| 热草久综合在线| 久久久久久国产精品三级玉女聊斋| 亚洲第一色中文字幕| 狠狠躁夜夜躁人人爽超碰91| 亚洲精品国产免费| 亚洲成人免费网站| 欧美成人免费观看| 亚洲国产精品电影在线观看| 日韩视频在线观看免费| 欧美福利视频在线观看| 91久久久久久| 日韩在线观看免费高清| 中文字幕一精品亚洲无线一区| 亚洲欧美自拍一区| 一区二区福利视频| 亚洲天堂网站在线观看视频| 成人xxxx视频| 欧美高清视频一区二区| 中文在线不卡视频| 亚洲视频在线视频| 久久久久久久亚洲精品| 国产精品一区二区三区久久| 国产亚洲日本欧美韩国| 国产在线一区二区三区| 国产极品jizzhd欧美| 一区二区三区视频免费| 欧美日韩视频在线| 国产成人精品av| 26uuu亚洲伊人春色| 国产成人一区二区三区电影|