`
f303153041
  • 浏览: 45776 次
社区版块
存档分类
最新评论

Volley 核心源码解析(四)

 
阅读更多
Volley 的缓存


1.磁盘缓存
在Volley类 调用 newRequestQueue方法的时候 ,创建了一个file

File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);

明显 这是做了磁盘缓存

RequestQueue queue;
        if (maxDiskCacheBytes <= -1)
        {
        // No maximum size specified
        queue = new RequestQueue(new DiskBasedCache(cacheDir), network);
        }
        else
        {
        // Disk cache size specified
        queue = new RequestQueue(new DiskBasedCache(cacheDir, maxDiskCacheBytes), network);
        }

        queue.start();

这里的意思是:没有设置缓存大小的时候,使用默认的缓存大小,反之使用自定义的大小

看看 DiskBasedCache类中的静态变量:

/** Default maximum disk usage in bytes. */
    private static final int DEFAULT_DISK_USAGE_BYTES = 5 * 1024 * 1024;

构造方法;
   public DiskBasedCache(File rootDirectory) {
        this(rootDirectory, DEFAULT_DISK_USAGE_BYTES);
    }

这就对磁盘缓存做了一个5M大小的初始化。
具体的DiskBasedCache怎么缓存的 这里就不深究了,有兴趣的可以自己去了解,无非就是把内容存到SD卡中。

2.内存缓存 MemoryChache

在Volley 中 我知道的使用内存缓存的地方 是在图片加载的时候,Volley 中定义一个 叫做
ImageCache 的接口,

public interface ImageCache {
        public Bitmap getBitmap(String url);
        public void putBitmap(String url, Bitmap bitmap);
    }

这个接口中定义了 两个方法,取和存。

在我们自己实现ImageCache的时候 可以用到 LruCache,也可以用 DiskChche
但是加载图片 优先用LruCache更快 其次才是  DiskChche;

这里给出一个简单的 实现:


public class BitmapLruCache implements ImageCache {

    private LruCache<String, Bitmap> cache;

    public BitmapLruCache() {
        cache = new LruCache<String, Bitmap>(8 * 1024 * 1024) {
            @Override
            protected int sizeOf(String key, Bitmap bitmap) {
                return bitmap.getRowBytes() * bitmap.getHeight();
            }
        };
    }

    @Override
    public Bitmap getBitmap(String url) {
        return cache.get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        cache.put(url, bitmap);
    }
}

现在有很多优秀的图片加载库 如  Facebook 的Fresco,ImageLoader 等.

当然 Volley的也很好用。

3.网络请求的缓存

在前面章节中已经结束到了,这里就不再细谈。

分享到:
评论

相关推荐

    Volley源码解析

    Volley源码解析是理解其工作原理、优化网络请求的关键,下面我们将深入探讨Volley的核心组件、工作流程以及关键算法。 首先,Volley的核心组件包括RequestQueue、Network、Cache和ResponseDelivery。RequestQueue是...

    volley源码和jar包

    在压缩包中的"Volley.jar"是Volley库的编译结果,可以直接导入到Android项目中使用,无需解析源码。使用jar包时,开发者可以直接调用Volley提供的API,如`RequestQueue.add(Request)`来添加请求,或者使用`...

    volley框架源码实例

    首先,Volley的核心特点包括: 1. **缓存机制**:Volley提供了内存和磁盘缓存策略,能够快速响应网络请求,减少对服务器的依赖,提高用户体验。 2. **线程管理**:Volley内部使用了线程池来处理网络请求,确保在...

    google官方最新volley源码

    5. **强大的转换能力**:Volley支持多种数据格式,如JSON、XML等,可以自动解析响应数据,无需额外的解析步骤。 6. **错误处理**:Volley提供了统一的错误处理机制,方便开发者捕获和处理网络请求过程中可能出现的...

    android volley源码

    在深入了解Volley的源码之前,我们先来概述一下Volley的基本概念和核心功能。 Volley的主要目标是简化Android应用中的网络请求处理,提供了一套高效的网络请求管理机制,包括异步处理、缓存策略、错误处理和性能...

    volley源码

    Volley的核心设计理念是优化UI线程的性能,减少网络延迟对用户界面的影响,以及通过缓存机制提高用户体验。下面我们将深入探讨Volley的源码,了解其工作原理和主要功能。 1. **网络请求模块**: - `Request`类是...

    Volley源码

    Volley的核心特性包括: 1. **缓存策略**: - Volley提供了基于内存和磁盘的两级缓存机制,能够快速响应网络请求,减少对服务器的压力。内存缓存用于存储最近访问的数据,磁盘缓存则用于长期存储,即使应用关闭也...

    Android Volley源码20160414版

    Volley 的核心优势在于其对网络请求的优化、内存管理以及线程调度策略。 1. **RequestQueue**:这是 Volley 的主要入口点,负责管理多个 CacheDispatcher 和 NetworkDispatcher 线程,处理请求队列。RequestQueue ...

    google volley源码和jar

    在Volley的源码中,可以看到许多关键类的设计,如Request类用于封装网络请求信息,ResponseListener接口用于处理响应数据,Parser类用于解析数据等。此外,Volley还提供了强大的错误处理机制,使得开发者可以方便地...

    可查看Volley源码

    Volley的核心理念是优化内存使用,减少网络请求的延迟,以及通过缓存机制提高用户体验。这个名为"可查看Volley源码"的压缩包文件,很显然是为了帮助开发者深入理解Volley的工作原理,从而更好地利用它进行应用开发。...

    Volley源码及文档

    Volley是Google推出的一款高效的网络请求库,专为Android平台设计。...通过深入理解Volley的源码,开发者可以更好地利用其特性,提升应用的网络性能。提供的文档将帮助你理解和应用这些知识点,解决实际开发中的问题。

    Volley.jar及源码

    - **数据解析**:Volley内置了对JSON和String的解析支持,简化了数据处理流程。 - **错误处理**:Volley提供了统一的错误处理机制,方便开发者捕获和处理网络异常。 **2. Volley的使用步骤** - **添加依赖**:...

    volley和okhttp的jar包含volley源码

    - 数据解析:Volley支持多种数据格式,如JSON、XML,可以直接转换为Java对象。 - 取消请求:可以轻松取消不再需要的请求,避免资源浪费。 2. OkHttp是Square公司开发的一个高效的HTTP客户端,其设计理念是减少...

    Volley框架源码

    Volley框架的源码分析可以帮助开发者深入理解其工作原理,从而更好地优化网络请求性能,例如调整缓存策略、定制网络栈或实现自定义的解析器。通过对源码的学习,开发者还可以解决Volley在特定场景下可能遇到的问题,...

    Volley框架源代码

    Volley默认有四个工作线程池:一个用于执行网络请求,两个用于处理缓存,一个用于执行回调到主线程的任务,确保UI更新在正确的线程中执行。 Volley还提供了一些其他特性,如取消请求、错误处理、自动重试策略等。...

Global site tag (gtag.js) - Google Analytics