美化WordPress的导航seo外包公司怎么样
文章目录
- 一、前言
- 二、关键代码
- 三、参考链接
一、前言
在程序中会经常需要做一些异步任务,但是由于部分操作其实很简单,仅仅是短暂的进行异步操作,然后在结果成功或失败的时候切换回主线程进行下一步处理,这期间不能阻塞主线程。这里记录一下使用google的guava库里面的ListenableFuture
并发类进行处理,CompletableFuture
也可以,只是在Android
上最低支持API23版本,但是项目最低支持21,使用coreLibraryDesugaring
进行兼容也处理不了这个问题,又因为项目中本身就有guava
。所以使用这个进行开发。Android自身的话可以使用Loader
或者Work
进行加载,Loader
的写法相对来说会简单一些
二、关键代码
private final ListeningExecutorService listeningExecutor = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
/*** 设置展示的信息*/public void setDisplayDataInfo(Weather.WeatherResponse dataInfo, Activity activity) {this.mActivity = activity;ParseHourDataCallable parseHourDataCallable = new ParseHourDataCallable(dataInfo);ListenableFuture<List<HourBean>> weaHourliesFuture = listeningExecutor.submit(parseHourDataCallable);Futures.addCallback(weaHourliesFuture, new FutureCallback<List<HourBean>>() {@Overridepublic void onSuccess(List<HourBean> result) {if (!result.isEmpty()){mAdapter.setDataList(result);}}@Overridepublic void onFailure(@NonNull Throwable t) {t.printStackTrace();//失败的话就不处理了}},ContextCompat.getMainExecutor(getContext()));//传入主线程的线程池,后面会自动切换线程}@Overrideprotected void onDetachedFromWindow() {super.onDetachedFromWindow();listeningExecutor.shutdown();}private class ParseHourDataCallable implements Callable<List<HourBean>>{private final Weather.WeatherResponse dataInfo;public ParseHourDataCallable(Weather.WeatherResponse dataInfo) {this.dataInfo = dataInfo;}@Overridepublic List<HourBean> call() throws Exception {//这里进行耗时操作List<HourBean> hours = new ArrayList<>();if (dataInfo != null && dataInfo.weaHourlies != null && dataInfo.weaHourlies.length > 0) {hours = parserData(Arrays.asList(dataInfo.weaHourlies),dataInfo.timezone ,dataInfo.sunrises[0]);}return hours;}}
整体用法的话和CompletableFuture
差不多
三、参考链接
- 使用 ListenableFuture
- ContextCompat.getMainExecutor(@NonNull Context context)
- 【并发编程】Guava - ListenableFuture,避免Future获取阻塞问题,增加回调
- Guava-ListenableFuture
- 那些年我们追过的异步骚操作:ListenableFuture、CompletableFuture、RxJava(Observable)
- Java线程池详解:Future的使用和实现
- Java多线程之CompletableFuture
- ListenableFuture,FutureCallback和超时
- Example usage for com.google.common.util.concurrent Futures withTimeout
- Google Guava 并发编程 - ListenableFuture
- Java并发编程——CompletableFuture类
- 深入解析CompletableFuture的功能和用法