码迷,mamicode.com
首页 > 编程语言 > 详细

andorid jar/库源码解析之Bolts

时间:2020-05-05 23:11:38      阅读:83      评论:0      收藏:0      [点我收藏+]

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

目录: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‘

andorid jar/库源码解析之Bolts

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

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!