- Task
- .forResult(URL)
- // 下载
- .onSuccess(task -> downloadBitmap(task.getResult()), Task.BACKGROUND_EXECUTOR)
- // 更新UI
- .onSuccess(task -> updateUI(task.getResult()), Task.UI_THREAD_EXECUTOR)
- // 存储UI状况
- .onSuccess(task -> saveUIState(task.getResult()), Task.BACKGROUND_EXECUTOR)
- // 提示
- .onSuccess(task -> toastMsg("save to " + task.getResult()), Task.UI_THREAD_EXECUT
- // handle error
- .continueWith(task -> {
- if (task.isFaulted()) {
- task.getError().printStackTrace();
- return false;
- }
- return true;
- });
线程调剂器
一个关于线程调剂的简单需求,在子线程大年夜收集下载图片,并返回下载的图片,在主线程应用该图片更新到 UI,同时返回当前 UI 的状况 json,在子线程将 json 数据保存到本地文件,完成后在主线程弹出提示,这中心涉及到了 4 次线程切换,同时后面的义务须要前面义务完成后的返回值作为参数。
共有 4 种类型履行线程,将义务分发到指定线程履行,分别是
- backgroud - 后台线程池,可以并发履行义务。
- scheduled - 单线程池,只有一个线程,重要用来履行 delay 操作。
- immediate - 即时线程,如不雅线程调用栈小于 15,则在当前哨程履行,不然代劳给 background 。
- uiThread - 针对 Android 设计,应用 Handler 发送到主线程履行。
backgroud
重要用来在后台并发履行多义务
- public static final ExecutorService BACKGROUND_EXECUTOR = BoltsExecutors.background();
在 Android 平台下根据 CPU 核数创建线程池,其他情况下,创建缓存线程池。
- background = !isAndroidRuntime()
- ? java.util.concurrent.Executors.newCachedThreadPool()
- : AndroidExecutors.newCachedThreadPool();
scheduled
重要用于义务之间做 delay 操作,并不实际履行义务。
- scheduled = Executors.newSingleThreadScheduledExecutor();
immediate
- private static final Executor IMMEDIATE_EXECUTOR = BoltsExecutors.immediate();
- // 关键办法
- @Override
- public void execute(Runnable command) {
- int depth = incrementDepth();
- try {
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践美团外卖此前也推出了“O2O及时配送智能调剂体系”。据其颁布的数据显示,上线该体系后,配送员单均配送时长>>>详细阅读
本文标题:「Android」Bolts-更简单的完成线程调度和任务管理
地址:http://www.17bianji.com/lsqh/39148.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示