转载

Next 库使用指南之 Task 模块(Android)

// v1.1.0 新增     // task 异步任务库,格式:jar和aar     compile 'com.mcxiaoke.next:task:1.+'

异步任务

包含异步任务执行模块相关的类,详细的使用见后面的说明

* TaskQueue 对外接口,支持单例使用 * TaskFuture 表示单个异步任务对象 * TaskBuilder 对外接口,链式调用 * TaskCallback 任务回调接口 

TaskBuilder

// TaskBuilder的定义见 com.mcxiaoke.next.task.TaskBuilder // sample for Task helper class final String testUrl = "https://api.github.com/users/mcxiaoke"; TaskBuilder.create(new Callable<JSONObject>() {  @Override  public JSONObject call() throws Exception {   final String response = NextClient.get(testUrl).string();   return new JSONObject(response);  } }).callback(new SimpleTaskCallback<JSONObject>() {  @Override  public void onTaskSuccess(final JSONObject result, final Bundle extras) {   super.onTaskSuccess(result, extras);   Log.v("Task", "onTaskSuccess() result=" + result);  }  @Override  public void onTaskFailure(final Throwable ex, final Bundle extras) {   super.onTaskFailure(ex, extras);   Log.e("Task", "onTaskFailure() error=" + ex);  } }).with(this).serial(false).start(); TaskBuilder.create(new Callable<JSONObject>() {  @Override  public JSONObject call() throws Exception {   final String response = NextClient.get(testUrl).string();   return new JSONObject(response);  } }).success(new Success<JSONObject>() {  @Override  public void onSuccess(final JSONObject result, final Bundle extras) {   Log.v("Task", "onSuccess() result=" + result);  } }).failure(new Failure() {  @Override  public void onFailure(final Throwable ex, final Bundle extras) {   Log.e("Task", "onFailure() error=" + ex);  } }).with(this).start(); // 创建TaskBuilder TaskBuilder.create(resultType|callable|callback)  .with(caller) // 设置Caller  .action(callable|runnable) // 设置Callable|Runnable  .callback(callback) // 设置TaskCallback  .success(success) //设置任务成功Callback  .failure(failure) //设置任务失败Callback  // caller==null,此时认为caller已被系统回收,忽略Callback  // Activity.isFinishing==true,此时认为caller已死,忽略Callback  // Fragment.isAdded==false,此时认为caller已死,忽略Callback  .check(true) //默认为true,设置是否检查Caller  .dispatch(handler)// 回调方法所在线程,默认是主线程  .serial(false) // 是否按顺序依次执行  .on(queue) // 设置自定义的TaskQueue  .delay(millis) // 设置任务延迟开始  .extras(bundle); // 添加额外参数,会通过callback返回  .build() // 生成Task对象  .start() //开始任务  .cancel()// 取消任务 

TaskFuture

// TaskFuture的接口定义见 com.mcxiaoke.next.task.TaskFuture         // TaskBuilder.build()返回一个TaskFuture对象,支持以下方法         // 获取Task的调用者         public String getGroup();         // 获取Task的名字,可用于 TaskQueue.cancel(name)         public String getName();         // 启动Task,开始执行         public String start();         // 取消Task,停止执行         public boolean cancel();         // Task是否是顺序执行         public boolean isSerial();         // Task是否已完成         public boolean isFinished();         // Task是否已取消         public boolean isCancelled();         // 获取Task执行时长         public long getDuration();         // 获取Task状态         public int getStatus();          // status取值         public static final int IDLE = 0; // 空闲,初始化         public static final int RUNNING = 1;  // 线程正在运行         public static final int CANCELLED = 2;  // 任务已取消         public static final int FAILURE = 3; // 任务已失败         public static final int SUCCESS = 4; // 任务已成功

TaskQueue

// TaskQueue的接口定义见 com.mcxiaoke.next.task.ITaskQueue // 使用默认TaskQueue final TaskQueue taskQueue=TaskQueue.getDefault(); // 使用新的自定义TaskQueue final TaskQueue taskQueue2=TaskQueue.createNew(); taskQueue2.setDebug(true); taskQueue2.setExecutor(Executors.newCachedThreadPool()); // you can use TaskCallable or just Callable final TaskCallable<String> callable=new TaskCallable<String>("name") {  @Override  public String call() throws Exception {   final String url="https://github.com/mcxiaoke/Android-Next/raw/master/README.md";   final NextResponse response=NextClient.get(url);   return response.string();  } }; // task callback final TaskCallback<String> callback=new SimpleTaskCallback<String>() {  @Override  public void onTaskStarted(final String name, final Bundle extras) {   // task started, default on main thread  }  @Override  public void onTaskFinished(final String name, final Bundle extras) {   // task finished, default on main thread  }  @Override  public void onTaskCancelled(final String name, final Bundle extras) {   // task cancelled, default on main thread  }  @Override  public void onTaskSuccess(final String result, final Bundle extras) {   // task success, default on main thread   mTextView.setText(result);  }  @Override  public void onTaskFailure(final Throwable ex, final Bundle extras) {   // task failure, default on main thread  } }; // execute task taskQueue.execute(callable,callback,caller,serial);  taskQueue // add task, execute concurrently taskQueue.add(callable,callback,caller); // add task, execute serially taskQueue.addSerially(callable, callback, caller); // set custom task executor taskQueue.setExecutor(executor); // save task name for cancel the task final String name=taskQueue.add(callable,callback,caller); taskQueue.cancel(name); // save task name for cancel the task final String name=TaskBuilder.create(callable).with(caller).start(); taskQueue.cancel(name); // cancel the task by caller taskQueue.cancelAll(caller); // cancel all task taskQueue.cancelAll(); 

TaskCallback

/**  * 任务回调接口  *  * @param <Result> 类型参数,任务执行结果  */ public interface TaskCallback<Result> {  // 第二个参数保证不为null,extras里包含以下信息  // 除onTaskStarted()外,以下值在其它回调方法里均可用  final String group=extras.getString(TASK_GROUP);  final String name=extras.getString(TASK_NAME);  final int sequence=extras.getInt(TASK_SEQUENCE);  final long delay=extras.getLong(TASK_DELAY);  final long duration=extras.getLong(TASK_DURATION);  // 这几个回调方法的执行顺序:  // onTaskStarted -> (onTaskFinished|onTaskCancelled) -> (onTaskSuccess|onTaskFailure)  /**   * 任务开始   * 注意:此方法默认运行于主线程,可通过 TaskBuilder.dispatch(handler)更改   *   * @param status TASK NAME   * @param extras 附加结果,需要返回多种结果时会用到   */  void onTaskStarted(final String name, final Bundle extras);  /**   * 任务完成   * 注意:此方法默认运行于主线程,可通过 TaskBuilder.dispatch(handler)更改   *   * @param status TASK NAME   * @param extras 附加结果,需要返回多种结果时会用到   */  void onTaskFinished(final String name, final Bundle extras);  /**   * 任务取消   * 注意:此方法默认运行于主线程,可通过 TaskBuilder.dispatch(handler)更改   *   * @param status TASK NAME   * @param extras 附加结果,需要返回多种结果时会用到   */  void onTaskCancelled(final String name, final Bundle extras);  /**   * 回调,任务执行完成   * 注意:此方法默认运行于主线程,可通过 TaskBuilder.dispatch(handler)更改   *   * @param result 执行结果   * @param extras 附加结果,需要返回多种结果时会用到   */  void onTaskSuccess(Result result, final Bundle extras);  /**   * 回调,任务执行失败   * 注意:此方法默认运行于主线程,可通过 TaskBuilder.dispatch(handler)更改   *   * @param ex  失败原因,异常   * @param extras 附加结果,需要返回额外的信息时会用到   */  void onTaskFailure(Throwable ex, final Bundle extras); } 

Success/Failure

// 任务成功的回调接口,先于TaskCallback.onTaskSuccess执行 public interface Success<Result> {  void onSuccess(final Result result, final Bundle extras); } // 任务失败的回调接口,先于TaskCallback.onTaskFailure执行 public interface Failure {  void onFailure(Throwable ex, final Bundle extras); } 

Async 异步执行工具类

// 一行代码即可,最简单的异步执行方法 Async.start(new Runnable() {  @Override  public void run() {   // do your work here  } }); Async.start(new Callable<String>() {  @Override  public String call() throws Exception {   // do your work here   return "Your Result";  } }); Async.start(new Runnable() {  @Override  public void run() {   // job1, do your work here  } }, new Runnable() {  @Override  public void run() {   // job2, do your work here  } }, new Runnable() {  @Override  public void run() {   // job3, do your work here  } }); 
正文到此结束
Loading...