andorid jar/库源码解析之Bolts

2021-01-29 11:16

阅读:605

标签:exec   cache   cal   schedule   流程   runnable   androi   throw   ice   

目录:andorid jar/库源码解析 

Bolts:

  作用:

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

  栗子:

Task.call(new Callable() {
            @Override
            public Boolean call() throws Exception {
                return true;
            }
        }, Task.UI_THREAD_EXECUTOR);

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

        Task.callInBackground(new Callable() {
            @Override
            public Boolean call() throws Exception {
                return true;
            }
        }).onSuccess(new Continuation() {
            @Override
            public Object then(Task task) throws Exception {
                if (task.getResult()) {
                    return null;
                } else {
                    return new Object();
                }
            }
        }, Task.BACKGROUND_EXECUTOR).continueWith(new Continuation() {
            @Override
            public Object then(Task 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‘

andorid jar/库源码解析之Bolts

标签:exec   cache   cal   schedule   流程   runnable   androi   throw   ice   

原文地址:https://www.cnblogs.com/Supperlitt/p/12833462.html


评论


亲,登录后才可以留言!