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'
  • 相关阅读:
    python实现从生成器中取固定角标的元素
    python-高阶函数
    git学习手册
    python批量进行文件修改操作
    python第一站
    LoadRunner,一个简单的例子
    python3中urllib2的问题
    gitlab 随笔
    sed 删除文本
    sed 修改文本
  • 原文地址:https://www.cnblogs.com/Supperlitt/p/12833462.html
Copyright © 2011-2022 走看看