日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

异步编程:JDeferred 2.x 的使用(针对Android)

發(fā)布時(shí)間:2024/4/15 Android 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 异步编程:JDeferred 2.x 的使用(针对Android) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本庫(kù)的地址:https://github.com/jdeferred/jdeferred
依賴方法:

implementation 'org.jdeferred.v2:jdeferred-android-aar:2.0.0-beta1'

這個(gè)庫(kù)是流式思想的實(shí)踐,類同于rxjava,但更加簡(jiǎn)單(當(dāng)然功能也沒(méi)有rxjava強(qiáng)大)

1,核心promise的方法:

// 萬(wàn)能方法:可以傳入DoneCallback, FailCallback, ProgressCallback, DoneFilter, then() ? // 如下回調(diào) 返回 promise (FailFilter, ProgressFilter, DonePipe, FailPipe, ProgressPipe) done() //完成回調(diào) fail() //失敗回調(diào) progress() //進(jìn)度回調(diào) always() //無(wú)論什么結(jié)果都會(huì)回調(diào)

2,DeferredObject

Deferred deferred = new DeferredObject(); deferred.resolve("成功了") //需要傳給done的結(jié)果 deferred.reject("失敗了")//需要傳給fail的結(jié)果 deferred.notify(100)//需要傳給progress的結(jié)果 // 實(shí)現(xiàn)了promise接口,可以調(diào)用promise內(nèi)的方法

3,DeferredManager

//默認(rèn)的ExecutorService是Executors.newCachedThreadPool(); DeferredManager dm = new DefaultDeferredManager(); DeferredManager dm = new DefaultDeferredManager(executorService); //針對(duì)android,AndroidDeferredManager 繼承了DefaultDeferredManager AndroidDeferredManager dm = new AndroidDeferredManager();

核心方法:dm.when(params)
params有以下幾種方式:
Callable, Runnable, Future,?
DeferredRunnable, DeferredCallable, DeferredFutureTask,
DeferredAsyncTask
(中三種是上三種的子類,內(nèi)部持有一個(gè)DeferredObject,上三種傳入后也會(huì)被封裝為DeferredFutureTask,內(nèi)部持有一個(gè)DeferredObject)
(DeferredFutureTask繼承于FutureTask(實(shí)現(xiàn)Runnable\Future,并持有Callable))
(DeferredAsyncTask繼承與AsyncTask,是android特有的,內(nèi)部持有一個(gè)DeferredObject)

4,支持同步和異步
a,同步的使用:

Deferred deferred = new DeferredObject(); Promise promise = deferred.promise(); promise.done(new DoneCallback() {public void onDone(Object result) {...} }).fail(new FailCallback() {public void onFail(Object rejection) {...} }).progress(new ProgressCallback() {public void onProgress(Object progress) {...} }).always(new AlwaysCallback() {public void onAlways(State state, Object result, Object rejection) {...} });deferred.resolve("done"); deferred.reject("oops"); deferred.notify("100%");

原理:DeferredObject內(nèi)部持有一個(gè)promise,當(dāng)調(diào)用resolve()時(shí),回調(diào)promise.done();調(diào)用reject()時(shí),回調(diào)promise.fail()..以此類推

或者

DeferredManager dm = new DefaultDeferredManager(); Promise p1, p2, p3; // initialize p1, p2, p3 dm.when(p1, p2, p3).done(…).fail(…)

原理:DeferredManager內(nèi)部對(duì)promise的返回做了原子性處理,保證了線程安全

b,異步的使用:

三種用法:

第一種:線程中使用deferred

final Deferred deferred = ... Promise promise = deferred.promise(); promise.then(…); Runnable r = new Runnable() {public void run() {while (…) {deferred.notify(myProgress);}deferred.resolve("done");} }

第二種:使用DeferredManager 和DeferredRunnable

DeferredManager dm = …; dm.when(new DeferredRunnable<Double>(){public void run() {while (…) {notify(myProgress);}} }).then(…);

第三種:使用AndroidDeferredManager(內(nèi)部封裝了AsyncTask和handler)

AndroidDeferredManager dm = new AndroidDeferredManager(); dm.when(new DeferredAsyncTask<Void, Progress, Result>(){@Overrideprotected Object doInBackgroundSafe(Void... voids) throws Exception {return null;} }).then(...);

使用案例:

VUiKit.defer().when(() -> {// 主要操作,比如寫(xiě)入數(shù)據(jù)庫(kù)等。}).then((v) -> {// 操作完成}).fail((err) -> {// 操作失敗Log.e(TAG,err);}); /** * 簡(jiǎn)單封裝一下調(diào)用方式 */ public class VUiKit {private static final AndroidDeferredManager gDM = new AndroidDeferredManager();private static final Handler gUiHandler = new Handler(Looper.getMainLooper());public static AndroidDeferredManager defer() {return gDM;}public static int dpToPx(Context context, int dp) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,context.getResources().getDisplayMetrics());}public static void post(Runnable r) {gUiHandler.post(r);}public static void postDelayed(long delay, Runnable r) {gUiHandler.postDelayed(r, delay);}public static void sleep(long time) {try {Thread.sleep(time);} catch (InterruptedException e) {e.printStackTrace();}} }

贈(zèng)送源碼:https://github.com/yugu88/MagicWX。

《最完整的Android逆向知識(shí)體系》

總結(jié)

以上是生活随笔為你收集整理的异步编程:JDeferred 2.x 的使用(针对Android)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。