Bolts:
作用:
用于链式执行跨线程代码,且传递数据栗子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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
1
2
3
4
5
6
7
8
9
|
/** * 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
1
2
3
4
5
6
7
|
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'
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/Supperlitt/p/12833462.html