分 享

【凤凰社】andorid jar/库源码解析之Bolts

目录:andorid jar/库源码解析 

Bolts:

  作用:

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

  栗子:

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'

0 评论

回复