Volley随笔之网络线程和缓存线程

一、网络线程 NetworkDispatcher

Volley框架中提供NetworkDispatcher类作为工作线程(work thread)处理网络请求,它继承了Thread。NetworkDispatcher在其run()方法中调用了

Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);

将网络请求线程的优先级设置成后台线程,后台线程是一个比一般线程优先级低的线程,不过能够最小限度的影响用户界面响应。
工作线程先从请求网络队列networkQueue中读取Request,然后执行网络请求,接着解析返回数据,最后判断数据是否需要缓存,整个过程都在工作线程的run()方法中实现。

二、缓存线程 CacheDispatcher

Volley框架提供CacheDispatcher类作为缓存线程来处理请求的缓存,它集成了Thread类,也同样是后台线程。CacheDispatcher每次会从缓存队列cacheQueue中获取网络请求,如果缓存中上次网络请求的返回数据没有过期,则不执行网络操作而直接返回给客户端缓存数据;如果缓存数据过期,则将请求放到网络队列networkQueue。

三、请求队列 RequestQueue

RequestQueue类在初始化的时候,会创建一个CacheDispatcher缓存线程和多个NetworkDispatcher网络线程。每次向队列RequestQueue添加网络请求Request的时候,队列会检查请求是否有缓存标志cacheKey,如果没有改标识则直接将请求放到网络队列networkQueue,如果有该标识则将请求放到缓存队列cacheQueue。

时间: 2024-12-19 10:53:19

Volley随笔之网络线程和缓存线程的相关文章

缓存线程池的作用

JAVA提供4种缓存线程池 newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程. newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待. newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行. newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(F

MySQL内存----使用说明全局缓存+线程缓存) 转

MySQL内存使用说明(全局缓存+线程缓存) 首先我们来看一个公式,MySQL中内存分为全局内存和线程内存两大部分(其实并不全部,只是影响比较大的 部分): per_thread_buffers=(read_buffer_size+read_rnd_buffer_size+sort_buffer_size+thread_stack+join_buffer_size+binlog_cache_size+tmp_table_size)*max_connections global_buffers=

8、java5线程池之动态缓存线程池newCachedThreadPool

JDK文档描述 创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们.对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能.调用 execute 将重用以前构造的线程(如果线程可用).如果现有线程没有可用的,则创建一个新线程并添加到池中.终止并从缓存中移除那些已有 60 秒钟未被使用的线程.因此,长时间保持空闲的线程池不会使用任何资源.注意,可以使用 ThreadPoolExecutor 构造方法创建具有类似属性但细节不同(例如超时参数)的线程池.

[网络开发]同步与线程安全方案

方案:synchronized,volatile+CAS(compareAndSet),atomic包,Lock接口 java同步和IO同步的对比: 都是同步异步的方案问题,一个操作的是java代码(实际是堆和方法区),一个操作的是TCP RecvBuffer而已 线程安全方案: https://www.cnblogs.com/jianmianruxin/p/7583262.html--------------------- 原文:https://blog.csdn.net/u010287873

Android volley 解析(四)之缓存篇

这是 volley 的第四篇 blog 了,写完这篇,volley 的大部分用法也都算写了一遍,所以暂时不会写 volley 的文章了,如果想看我前面写的文章,可以点这里 Android volley 解析(三)之文件上传篇 为什么要用缓存 我们知道,当客户端在请求网络数据的时候,是需要消耗流量的,特别是对于移动端用户来说,对于流量的控制要求很高.所以在做网络请求的时候,如果对数据更新要求不是特别高,往往都会用到缓存机制,一方面能减少对服务端的请求,控制流量:另一方面,当客户端在没有网络的情况下

Android使用Google推荐的联网框架Volley,让连接网络更加简单

大家好,随着技术的进步,科技的发达,很少有应用是单机的了,大部分都需要联网访问服务器,以前我们都用 httpclient和httpurlconnection,感觉是不是非常麻烦,而Google特别为开发者考虑,推出了Volley,从此妈妈再也不担心我的联网问题了,哪里联不上联哪里,Volley让联网更容易和更快,并且Volley请求会异步执行,不阻挡主线程联网请求无非就是Get或者Post,我们很少用到DELETE这个请求方式,说了这么多废话,下面让我们看看Volley到底能干啥.它真的有这么神

Volley与XUtils网络请求使用对比,心得,两者基本使用

之前一直使用的Volley作为网络请求框架,它是Google 在2013年的I/O大会 上,发布的.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮,同时扩展性很强.在用它之前我进行了简单的封装,因为Volley默认的请求线程生命周期伴随着Activity的周期,这有时并不能满足项目需要,so上代码: 1 <span style="font-size:14px;"><span style="font-size:14px;&qu

Android Volley 库通过网络获取 JSON 数据

本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpClient 以及 HttpConnection 这两个包.前者是 Apache 开源库,后者是 Android 自带 API.企业级应用,一般都会选择使用已经封装好的 http 框架.比较流行有 Volley.android-async-http.retrofit.okhttp.androidquery.

线程基础:线程池(6)——基本使用(中)

(接上文:<线程基础:线程池(5)--基本使用(上)>) 3-4.JAVA主要线程池的继承结构 我们先来总结一下上文中讨论过的内容,首先就是JAVA中ThreadPoolExecutor类的继承结构.如下图所示: ThreadPoolExecutor:这个线程池就是我们这两篇文章中介绍的重点线程池实现.程序员可以通过这个线程池中的submit()方法或者execute()方法,执行所有实现了Runnable接口或者Callable接口的任务:ThreadPoolExecutor对于这些任务的执