zoukankan      html  css  js  c++  java
  • 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'
  • 相关阅读:
    C/C++多文件之间的变量定义
    PKU POJ 2186 Popular Cows 强连通分量
    重载函数
    ZOJ 2763 Prison Break
    201357 训练赛总结
    hdu 4467 Graph 构造
    201356 训练赛总结
    201353 NEERC 2012, Eastern subregional contest
    2013512 CF 183 总结
    一道动态规划
  • 原文地址:https://www.cnblogs.com/Supperlitt/p/12833462.html
Copyright © 2011-2022 走看看