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'
  • 相关阅读:
    【转】sql 如何设计数据库表实现完整的RBAC(基于角色权限控制)
    【转】windows自带终止进程的超强命令
    【源码】 gridview 里使用checkbox
    【转】调用 开始 运行 直接执行命令
    【源码】DropDownList绑定数据
    C++ 编译器数据类型差异
    Flash 中将不透明的 Bitmap 透明化处理
    使用命令行切换IP地址
    MKV 高清视频文件分解与封装和音频编码的转换
    Visual Studio 2010 C++ 用户属性设置
  • 原文地址:https://www.cnblogs.com/Supperlitt/p/12833462.html
Copyright © 2011-2022 走看看