使用ListenableFuture进行异步任务执行并进行线程切换
文章目录
- 一、前言
- 二、关键代码
- 三、参考链接
一、前言
在程序中会经常需要做一些异步任务,但是由于部分操作其实很简单,仅仅是短暂的进行异步操作,然后在结果成功或失败的时候切换回主线程进行下一步处理,这期间不能阻塞主线程。这里记录一下使用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的功能和用法
相关文章:
使用ListenableFuture进行异步任务执行并进行线程切换
文章目录 一、前言二、关键代码三、参考链接 一、前言 在程序中会经常需要做一些异步任务,但是由于部分操作其实很简单,仅仅是短暂的进行异步操作,然后在结果成功或失败的时候切换回主线程进行下一步处理,这期间不能阻塞主线程。…...
C#,数值计算——插值和外推,RBF_fn 与 RBF_gauss 的计算方法与源程序
1 文本格式 using System; namespace Legalsoft.Truffer { public interface RBF_fn { double rbf(double r); } } ---------------------------------------------- using System; namespace Legalsoft.Truffer { public class RBF_gauss : RBF…...
Java8实战-总结49
Java8实战-总结49 CompletableFuture:组合式异步编程对多个异步任务进行流水线操作构造同步和异步操作将两个 CompletableFuture 对象整合起来,无论它们是否存在依赖 CompletableFuture:组合式异步编程 对多个异步任务进行流水线操作 构造同…...
云匣子 FastJson反序列化RCE漏洞复现
0x01 产品简介 云匣子是租户连接云资源的安全管理工具,帮助云租户更加安全、精细的管理云上的虚拟机、数据库等资源。 云安宝结合多年的运维和安全实践,将云上的运维和安全有机结合,实现对运维过程的事前规划、事中控制和 事后审计。在此之上…...
全程云OA SQL注入漏洞复现
0x01 产品简介 全程云OA为企业提供日常办公管理、公文管理、工作请示、汇报、档案、知识体系、预算控制等26个功能,超过100多个子模块。为企业内部提供高效、畅通的信息渠道,同时也能大力推动公司信息系统发展,提高企业的办公自动化程度和综合…...
IDEA DeBug
文章目录 01_Debug简介和意义02_IDEA中的Debug步骤03_跳转到当前代码执行的行04_步过调试的使用05_步入调试的使用06_强制步入调试的使用07_步出调试的使用08_回退断点调试的使用09_运行到光标处10_计算表达式11_条件断点12_多线程调试 01_Debug简介和意义 什么是程序DeBug&am…...
本地部署 ComfyUI
本地部署 ComfyUI ComfyUI 介绍ComfyUI Github 地址部署 ComfyUI配置模型地址 or 下载模型启动 ComfyUI访问 ComfyUI使用技巧页面底部显示图片预览改变连接线的格式配置 prompt 自动补全 安装 ComfyUI-Manager安装 AIGODLIKE-COMFYUI-TRANSLATION安装 ComfyUI-Custom-Scripts安…...
RHCE---给openlab搭建web网站
作业:请给openlab搭建web网站 网站需求: 1.基于域名 www.openlab.com 可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站, 1、基于 www.openlab.com/student 网站访问学生信…...
[BJDCTF2020]The mystery of ip1
提示 ssti模板注入head头x-forwarded-for 每一次做题的最开始流程都大致因该是 信息收集找可以操控的地方 查看hint页面的源代码又发现它提示说 ####你知道为什么会知道你的ip吗 查看flag页面 从刚才给我的提示以及他这里显示的我的ip,大概找到了我可操作的可控点 …...
常见树种(贵州省):021冬青、连香树、白辛树、香合欢、云贵鹅耳枥、肥牛树、杜英、格木、黄连木、圆果化香树、南天竹
摘要:本专栏树种介绍图片来源于PPBC中国植物图像库(下附网址),本文整理仅做交流学习使用,同时便于查找,如有侵权请联系删除。 图片网址:PPBC中国植物图像库——最大的植物分类图片库 一、冬青 …...
[论文阅读]CBAM——代码实现和讲解
CBAM 论文网址:CBAM 论文代码:CBAM 本文提出了一种卷积块注意力模块(CBAM),它是卷积神经网络(CNN)的一种轻量级、高效的注意力模块。该模块沿着通道和空间两个独立维度依次推导注意力图&#x…...
蓝桥杯第2119题 特殊时间 C++ 思维暴力
题目 思路和解题方法 1110 代表 1110年11月10号11点10分1110 4*4*4 有0111 1011 1101 1110 可以符合年 月日 时分秒的都有4种例如 1113有1113 1131 1311 3111 年份符合月日只有11 13 时分秒 只有11 13 11 31 13 11 无31 11 c 代码 #include <bits/stdc.h> using…...
Modbus RTU协议及modbus库函数使用
一、与Modbus TCP的区别 在一般工业场景使用modbus RTU的场景还是更多一些,modbus RTU基于串行协议进行收发数据,包括RS232/485等工业总线协议。 与modbus TCP不同的是RTU没有报文头MBAP字段,但是在尾部增加了两个CRC检验字节(CRC…...
Linuxfork,写时拷贝
1.prinf隐藏的缓冲区 1.思考:为什么会有缓冲区的存在? 2.演示及思考? 1).演示缓存区没有存在感 那为什么我们感觉不到缓冲区的存在呢?我们要打印东西直接就打印了呢? 我们用代码演示一下: 比如打开一个main.c,输入内容如下: #include <stdio.h> int main() { …...
Android控件全解手册 - 自定义实现水波进度
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列...
Halcon Solution Guide I basics(4.1): Blob Analysis 自主练习
文章目录 文章专栏前言自主练习题目输出电路板焊点个数解决方案:正确率:90 文章专栏 我的Halcon开发 CSDN 专栏 Halcon学习 练习项目gitee仓库 CSDN Major 博主Halcon文章推荐 随笔分类 - Halcon入门学习教程 前言 为了更加熟练的掌握Halcon的练习,我之…...
视频网站适合租用服务器吗?
视频网站适合租用服务器吗? 谈到服务器租用,在服务器租用市场中,通常比较常见的用户群体有电商、外贸和视频等网站。在这里相信很多用户都有疑问:租用的服务器适不适合用来建立视频网站呢?接下来我们一起来看看吧~ 首…...
2024年度投资策略:AI大模型和半导体国产化加速
今天分享的是AI系列深度研究报告:《2024年度投资策略:AI大模型和半导体国产化加速》。 (报告出品方:东方证券) 报告共计:48页 前言: 行情回顾与未来展望 电子板块涨幅转正,信心逐渐回归。截至…...
【Amazon】创建Amazon EFS 文件系统并将其挂载到Amazon EC2实例
文章目录 1. Amazon EFS文件系统2. Amazon EFS文件系统工作原理图3. 创建Amazon EFS 文件系统操作步骤3.1 创建安全组3.2 创建 EFS 文件系统3.3 启动 EC2 实例并挂载文件系统 4.清理资源4.1 终止 EC2 实例4.2 删除 EFS 文件系统 5.参考链接 1. Amazon EFS文件系统 Amazon EFS …...
微机原理_5
一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。) 8086微处理器CLK引脚输入时钟信号是由(提供。 A. 8284 B. 8288 C.8287 D. 8289 2.下面4个寄存器中,不能作为间接寻址的寄存器是(…...
深度学习CP分割实战:从Docker部署到MAC M2性能优化
1. 深度学习CP分割入门指南 脉络丛分割(Choroid Plexus Segmentation)在医学影像分析中是个有趣又实用的任务。我第一次接触这个领域时,也被传统方法的复杂度吓了一跳。Freesurfer这类工具虽然功能强大,但配置繁琐、运行时间长&am…...
Java生产者消费者模式实战解析
Java生产者消费者模式实战解析异步模式传统版改进版阻塞队列异步模式 传统版 异步模式之生产者/消费者: class ShareData {private int number 0;private Lock lock new ReentrantLock();private Condition condition lock.newCondition();public void increm…...
SpaceClaim 流体域建模实战:从零到一构建CFD仿真几何
1. SpaceClaim流体域建模基础概念 第一次接触CFD仿真时,我完全被复杂的几何建模难住了。直到发现SpaceClaim这个神器,才明白原来流体域建模可以如此直观高效。SpaceClaim作为ANSYS旗下的直接建模工具,彻底改变了传统参数化建模的繁琐流程&am…...
硬件看门狗SP706选型、电路设计与软件配置避坑指南
SP706硬件看门狗芯片的工程实践指南:选型、设计与软件配置全解析 在嵌入式系统开发中,系统稳定性是衡量产品质量的核心指标之一。我曾参与过一个工业控制网关项目,在高温环境下连续运行两周后,系统突然死机导致产线停摆。事后分析…...
【分析思考】银行AI转型:从“技术替换“到“价值重构“
引言:历史的回声——电动机革命的现代启示 历史背景补充:19世纪80年代,电力开始商业化应用。但直到20世纪20年代,美国工厂电气化才基本完成,历时近40年。这段延迟不是因为电力技术不成熟,而是因为生产组织方式的变革滞后于动力技术的变革。 关键洞察:电动机(1888年实用…...
5分钟构建企业级WebDAV文件共享解决方案:Go语言驱动的高性能部署指南
5分钟构建企业级WebDAV文件共享解决方案:Go语言驱动的高性能部署指南 【免费下载链接】webdav A simple and standalone WebDAV server. 项目地址: https://gitcode.com/gh_mirrors/we/webdav 在当今数字化办公环境中,企业级文件共享服务已成为基…...
如何3步掌握Akebi-GC:原神智能辅助工具的完整使用指南
如何3步掌握Akebi-GC:原神智能辅助工具的完整使用指南 【免费下载链接】Akebi-GC (Fork) The great software for some game that exploiting anime girls (and boys). 项目地址: https://gitcode.com/gh_mirrors/ak/Akebi-GC 还在为《原神》中重复的收集任务…...
Wonder3D完整指南:从单张图片到3D模型的终极AI建模方案
Wonder3D完整指南:从单张图片到3D模型的终极AI建模方案 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion for 3D Generation 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D Wonder3D是一款革命性的AI 3D建模工具&#x…...
[图文超超超详细教程] ~Cursor~ 保姆级下载安装以及API配置接入使用教程!!!
Cursor 是一款以 AI 为核心的智能代码编辑器,可以把它理解为“更懂项目上下文的 VS Code”。提供智能代码补全、代码生成、代码修改、代码搜索和代码解释等。与其他工具不同,Cursor 将AI 辅助编码直接融入到 编辑器的核心功能中,你可以用自然…...
lerobot so101机械臂锁死紧急救援!删除校准文件三步重生术
问题在调试校准lerobot so101机械臂,第二遍执行校准机械臂的命令lerobot-calibrate时,整个机械臂锁死,无法手动调整舵机: lerobot-calibrate \--robot.typeso101_follower \--robot.port/dev/ttyACM0 \--robot.idmy_awesome_follo…...
