Android Volley 网络并发 监听网络队列完成

2024-06-18 11:39

本文主要是介绍Android Volley 网络并发 监听网络队列完成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先说明一下原理:


1.利用反射机制获取 RequestQueue 队列中 mCurrentRequests 当前请求的集合,如果size==0, 则说明并发性网络请求已完成,为了保证准确性,建议给需要监听的网络请求设置tag,并利用tag进行过滤


2.利用定时循环线程进行动态取值



代码如下:

public static void whetherRequestCompleted(Context context,RequestSchedule requestSchedule){whetherRequestCompleted(context,null,requestSchedule);
}public static void whetherRequestCompleted(final Context context,final Object requestTag,final RequestSchedule requestSchedule){final Handler handler=new Handler(){@Override
        public void handleMessage(Message msg) {if(msg.what==0){requestSchedule.completed();}else if(msg.what==1){requestSchedule.failed((Exception)msg.obj);}}};final Timer timer = new Timer();timer.schedule(new TimerTask() {int num = 0;public void run() {try {++this.num;boolean e = true;RequestQueue requestQueue = VolleyManager.getRequestQueue(context);Field field = requestQueue.getClass().getDeclaredField("mCurrentRequests");field.setAccessible(true);Set set = (Set)field.get(requestQueue);if(set!=null&&set.size()>0){Iterator var5 = set.iterator();while(var5.hasNext()) {Request r = (Request)var5.next();if(r!=null&&r.getTag()!=null){if(r.getTag().equals(requestTag == null?context.getClass().getName():requestTag)) {e = false;}}}}if(e) {Message message=new Message();message.what=0;message.obj=null;handler.sendMessage(message);timer.cancel();return;}if((long)(this.num * 1000) > VolleyManager.mTimeoutMs) {Message message=new Message();message.what=1;message.obj=new TimeoutException();handler.sendMessage(message);timer.cancel();return;}} catch (NoSuchFieldException var7) {Message message=new Message();message.what=1;message.obj=var7;handler.sendMessage(message);timer.cancel();} catch (IllegalAccessException var8) {Message message=new Message();message.what=1;message.obj=var8;handler.sendMessage(message);timer.cancel();} catch (ConcurrentModificationException var9) {}}}, 0L, 1000L);}public interface RequestSchedule{abstract void completed();abstract void failed(Exception e);
}


说明:

1, 第一个方法中tag==null, 本人在代码用默认使用当前页面的类名进行过滤(如果不使用,可以忽略)

2. 使用handler 是为了保证在主线程用调用回调接口可以进行UI操作

3. mTimeoutMs 是为了避免死锁问题

这篇关于Android Volley 网络并发 监听网络队列完成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071963

相关文章

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

MySQL中处理数据的并发一致性的实现示例

《MySQL中处理数据的并发一致性的实现示例》在MySQL中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致,MySQL通过事务和锁机制来管理... 目录一、事务(Transactions)1. 事务控制语句二、锁(Locks)1. 锁类型2. 锁粒

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer