目錄:andorid jar/庫源碼解析 Bolts: 作用: 用於鏈式執行跨線程代碼,且傳遞數據 慄子: Task.call(new Callable<Boolean>() { @Override public Boolean call() throws Exception { return tr ...
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'