2020年5月6日星期三

andorid jar/库源码解析之Bolts

andorid jar/库源码解析之Bolts


目录:andorid jar/库源码解析 

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

private BoltsExecutors() { background = !isAndroidRuntime()  ? java.util.concurrent.Executors.newCachedThreadPool()  : AndroidExecutors.newCachedThreadPool(); scheduled = Executors.newSingleThreadScheduledExecutor(); immediate = new ImmediateExecutor(); }

  源码:https://github.com/BoltsFramework/Bolts-Android

  引入:

implementation 'com.parse.bolts:bolts-android:1.2.0'

没有评论:

发表评论