Android级连异步任务——Bolts-Android使用方式

简介: Parse开源了一个面向iOS和Android的底层库集合,统称为Bolts。根据Parse的公告,Bolts是Parse和Facebook共同努力将两家公司各自独立开发的小型底层工具类合并的结果。Bolts-Android为一个级联的异步任务。

Parse开源了一个面向iOS和Android的底层库集合,统称为Bolts。根据Parse的公告,Bolts是Parse和Facebook共同努力将两家公司各自独立开发的小型底层工具类合并的结果。Bolts-Android为一个级联的异步任务。

Bolts-Android github地址:
https://github.com/BoltsFramework/Bolts-Android

本文案例的 github地址:
https://github.com/AndroidHighQualityCodeStudy/Android_Task_ThirdCode_Bolts

使用方式

//###############################第1部分###########################
//运行在后台线程中(与“更新UI相关的网络请求”和“与UI相关的DB请求”用该线程池 )
// 我还定义了一个日志上传线程池,所有的日志上传应该使用LOG_UPLOAD_EXECUTOR线程池,谢谢
public Task<Boolean> runOnBackgroundThread() {
   //
   return Task.call(new Callable<Boolean>() {
       @Override
       public Boolean call() throws Exception {
           // Background_Thread
           return true;
       }
   }, Task.BACKGROUND_EXECUTOR);
}

//运行在当前线程中
public Task<Boolean> runOnCurrentThread() {
   //
   return Task.call(new Callable<Boolean>() {
       @Override
       public Boolean call() throws Exception {
           // Current_Thread
           return true;
       }
   });
}

//运行在UI线程中
public Task<Boolean> runOnUIThread() {
   //
   return Task.call(new Callable<Boolean>() {
       @Override
       public Boolean call() throws Exception {
           // UI_Thread
           return true;
       }
   }, Task.UI_THREAD_EXECUTOR);
}

//###############################第2部分###########################
//任务顺序执行
public Task synchronousTask(CancellationToken cancellationToken) {
   return Task.call(new Callable<Void>() {
       @Override
       public Void call() throws Exception {
           // UI_Thread
           LogUtils.d(TAG, "---1 UI_Thread---");
           return null;
       }
   }, Task.UI_THREAD_EXECUTOR, cancellationToken).onSuccess(new Continuation<Void, Boolean>() {
       @Override
       public Boolean then(Task<Void> task) throws Exception {
           // Background_Thread
           LogUtils.d(TAG, "---2 Background_Thread---");
           return true;
       }
   }, Task.BACKGROUND_EXECUTOR).continueWith(new Continuation<Boolean, Void>() {
       @Override
       public Void then(Task<Boolean> task) throws Exception {
           // UI_Thread
           LogUtils.d(TAG, "---3 UI_Thread---");
           return null;
       }
   }, Task.UI_THREAD_EXECUTOR);
}

//###############################第3部分###########################
//多任务并行
public void whenAll() {
   ArrayList<Task<Void>> tasks = new ArrayList<Task<Void>>();
   for (int i = 0; i < 3; i++) {
       final int index = i;
       // Start this delete immediately and add its task to the list.
       tasks.add(Task.call(new Callable<Void>() {
           @Override
           public Void call() throws Exception {
               // UI_Thread
               LogUtils.d(TAG, "---###########################---");
               LogUtils.d(TAG, "index: " + index);
               return null;
           }
       }, Task.BACKGROUND_EXECUTOR));
   }

   Task.whenAll(tasks);
}

//###############################第4部分###########################
//自定义线程池
static final Executor NETWORK_EXECUTOR = Executors.newCachedThreadPool();
static final Executor DISK_EXECUTOR = Executors.newCachedThreadPool();

//
public void changeThreadPool() {
   Task.call(new Callable<Boolean>() {
       @Override
       public Boolean call() throws Exception {
           // NETWORK_Thread
           return null;
       }
   }, NETWORK_EXECUTOR).continueWith(new Continuation<Boolean, String>() {
       @Override
       public String then(Task<Boolean> task) throws Exception {
           // NETWORK_Thread
           return null;
       }
   }).continueWith(new Continuation<String, Integer>() {
       @Override
       public Integer then(Task<String> task) throws Exception {
           // DISK_Thread
           return null;
       }
   }, DISK_EXECUTOR);
}

//###############################第5部分###########################
//取消任务
public void cancelTask() {
   CancellationTokenSource cts = new CancellationTokenSource();
   Task<Boolean> stringTask = runOnBackgroundThread(cts.getToken());
   cts.cancel();
}

//运行在后台线程中
public Task<Boolean> runOnBackgroundThread(CancellationToken cancellationToken) {
   //
   return Task.call(new Callable<Boolean>() {
       @Override
       public Boolean call() throws Exception {
           // Background_Thread
           return true;
       }
   }, Task.BACKGROUND_EXECUTOR, cancellationToken);
}

= THE END =

文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。

目录
相关文章
|
6月前
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
170 5
|
6月前
|
Java 数据库 Android开发
Android异步之旅:探索AsyncTask
Android异步之旅:探索AsyncTask
57 0
|
1月前
|
Android开发
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
|
1月前
|
Android开发 Kotlin
Android面试题之Kotlin中如何实现串行和并行任务?
本文介绍了 Kotlin 中 `async` 和 `await` 在并发编程中的应用,包括并行与串行任务的处理方法。并通过示例代码展示了如何启动并收集异步任务的结果。
28 0
|
5月前
|
存储 Java 数据库连接
Android Java开发异步
【6月更文挑战第15天】
|
5月前
|
JSON Java API
【Android】使用 Retrofit2 发送异步网络请求的简单案例
**摘要:** Retrofit是Android和Java的HTTP客户端库,简化了RESTful API交互。它通过Java接口定义HTTP请求,并提供注解管理参数、HTTP方法等。要使用Retrofit,首先在AndroidManifest.xml中添加`INTERNET`权限,然后在`build.gradle`中引入Retrofit和Gson依赖。创建服务器响应数据类和描述接口的接口,如`Result`和`Api`。通过Retrofit.Builder配置基础URL并构建实例,之后调用接口方法创建Call对象并发送异步请求。
212 1
|
5月前
|
Android开发
40. 【Android教程】AsyncTask:异步任务
40. 【Android教程】AsyncTask:异步任务
136 2
|
6月前
|
Android开发 对象存储
OSS对象储存android开发进行下载到本地文件时异步操作失效
android vivo80使用官方示例代码进行文件下载,但是使用oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>()时onSuccess和onFailure不执行
|
6月前
|
Android开发 开发者
Android异步之旅:探索IntentService
Android异步之旅:探索IntentService
58 0
|
6月前
|
消息中间件 数据库 Android开发
Android异步之旅:探索HandlerThread
Android异步之旅:探索HandlerThread
61 0
下一篇
无影云桌面