当前位置:主页 > 移动开发 > Android代码 >

Andorid jar库源码Bolts原理解析

时间:2021-01-06 11:23:18 | 栏目:Android代码 | 点击:

Bolts:
  作用:
    用于链式执行跨线程代码,且传递数据

  栗子:
复制代码
Task.call(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
return true;
}
}, Task.UI_THREAD_EXECUTOR);

Task.callInBackground(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
return false;
}
});

Task.callInBackground(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
return true;
}
}).onSuccess(new Continuation<Boolean, Object>() {
@Override
public Object then(Task<Boolean> task) throws Exception {
if (task.getResult()) {
return null;
} else {
return new Object();
}
}
}, Task.BACKGROUND_EXECUTOR).continueWith(new Continuation<Object, Object>() {
@Override
public Object then(Task<Object> task) throws Exception {
if (task.getResult() == null) {
Toast.makeText(getBaseContext(), "null", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getBaseContext(), "not null", Toast.LENGTH_SHORT).show();
}

return null;
}
}, Task.UI_THREAD_EXECUTOR);
复制代码
  源码解读:
  在内部通过维护多中 ExecutorService 对象,并且通过串联的方式进行调用。

  并且通过维护内部变量在,在指定流程处,就是特定的,值,值通过Task的对象getResult拿到。

  UIThread

复制代码
/**
* An {@link java.util.concurrent.Executor} that runs tasks on the UI thread.
*/
private static class UIThreadExecutor implements Executor {
@Override
public void execute(Runnable command) {
new Handler(Looper.getMainLooper()).post(command);
}
}
复制代码
  BackgroundThread

您可能感兴趣的文章:

相关文章