andorid jar/库源码解析之Bolts
程序员文章站
2022-03-20 15:39:21
目录:andorid jar/库源码解析 Bolts: 作用: 用于链式执行跨线程代码,且传递数据 栗子: Task.call(new Callable() { @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'
上一篇: 爆逗,高考结束了,段子还不少
下一篇: 使用JavaScript完成表单的校验