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'
  • 相关阅读:
    Linux系统运维之MYSQL数据库集群部署(主从复制)
    Linux系统运维之负载均衡Tengine
    Linux系统运维之subversionEdge部署
    Linux系统运维之Hadoop、Hive、Flume数据处理
    CoIDE在STM32系列单片机中的使用实践
    软硬件调试九法:第三条规则 不要想而要看
    《产品经理》读书笔记
    <读书笔记> 代码整洁之道
    关于鼠标手的症状和恢复方法
    <读书笔记>软件调试之道 :从大局看调试-理想的调试环境
  • 原文地址:https://www.cnblogs.com/Supperlitt/p/12833462.html
Copyright © 2011-2022 走看看