Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践
尤塞恩·圣利奥·博尔特 Usain St Leo Bolt ,牙买加短跑活动员,须眉100米、须眉200米以及须眉400米接力赛的世界记载坚进出,同时是以上三项赛事的持续三届奥运金牌得主。
应用 Bolts 可以将一个完全的操作拆分成多个子义务,这些子义务可以自由的拆分、组合和调换,每个义务作为全部义务链的一环可以运行在指定线程中,同时既能大年夜上行义务中获取义务结不雅,又可以向下行义务宣布当前义务的结不雅,而不必推敲线程之间的交互。
Bolts-Android Bolts 在 Android 下的实现 Bolts-ObjC Bolts 在 OC 下的实现 Bolts-Swift Bolts 在 Swift 下的实现
媒介
重要用来简化那些不指定运行线程的办法,默认在当前哨程去履行义务,应用 ThreadLocal 保存每个线程调用栈的深度,如不雅深度不跨越 15,则在当前哨程履行,不然代劳给 backgroud 履行。
应用 Thread + Handler 实现,线程调剂很不灵活,代码可读性差,不美不雅,扩大性差,缺点处理异常麻烦。
- String url = "http://www.baidu.com";
- Handler handler = new Handler(Looper.getMainLooper());
- new Thread(() -> {
- // 下载
- Bitmap bitmap = downloadBitmap(url);
- handler.post(() -> {
- // 更新 UI
- String json = updateUI(bitmap);
- new Thread(() -> {
- // 向存储写入UI状况
- saveUIState(json);
- // 保存成功后,提示
- handler.post(() -> toastMsg("save finish."));
- }).start();
- });
- }).start();
应用 RxJava 实现,线程调剂异常灵活,链式调用,代码清楚,扩大性好,有同一的异常处理机制,不过 Rx 是一个很强大年夜的看维如不雅只用来做线程调剂的话, Rx 就显得有点太重了。
- Observable.just(URL)
- // 下载
- .map(this::downloadBitmap)
- .subscribeOn(Schedulers.newThread())
- // 更新UI
- .observeOn(AndroidSchedulers.mainThread())
- .map(this::updateUI)
- // 存储 UI 状况
- .observeOn(Schedulers.io())
- .map(this::saveUIState)
- // 显示提示
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(rst -> toastMsg("save to " + rst),
- // handle error
- Throwable::printStackTrace);
应用 bolts 实现,线程调剂灵活,链式调用,代码清楚,具有优胜的扩大性,具有同一的异常处理机制,固然没有 Rx 那么丰富的操作符,然则胜在类库异常异常小,只有 38 KB。
应用 whenAll 办法,履行多个义务,当全部义务履行完后,返回结不雅
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践美团外卖此前也推出了“O2O及时配送智能调剂体系”。据其颁布的数据显示,上线该体系后,配送员单均配送时长>>>详细阅读
本文标题:「Android」Bolts-更简单的完成线程调度和任务管理
地址:http://www.17bianji.com/lsqh/39148.html
1/2 1