齐射图像caching

我想了解Volley的图像caching。 里面有一个gridview的片段,它会加载大约12-30张图片。 有图像从服务器检索,我使用NetworkImageView加载这些图像。

我能够在NetworkImageView中显示图像,一切正常。 但是,当我从一个fragment切换到另一个片段时,回到之前的片段,在LogCat ,我看到Volley试图再次获取图像。

我读Volley自动照顾图像caching。 当图像被caching在第一个fragment ,为什么当我从第二个到第一个回来时,又想要再次获取图像? 首先,是LogCat数据,显示Volley的图像请求? 或者是其他东西…

以下是我的代码:

onCreate()

 queue = Volley.newRequestQueue(getActivity()); imageLoader = new ImageLoader(queue, new ImageLoader.ImageCache() { private final LruCache<String, Bitmap> mCache = new LruCache<String, Bitmap>( 10); public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); } public Bitmap getBitmap(String url) { return mCache.get(url); } }); 

Logcat第一次加载片段时:

 02-18 14:21:20.724: D/Volley(14713): [4944] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://img.androidcookie.com/android/screen-shot-2014-02-17-at-11-57-29-pm.png 0x800c5bdc LOW 2> [lifetime=3782], [size=398563], [rc=200], [retryCount=0] 02-18 14:21:20.874: D/Volley(14713): [4943] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://img.androidcookie.com/android/st-vincent.jpg 0x800c5bdc LOW 3> [lifetime=3941], [size=501475], [rc=200], [retryCount=0] 02-18 14:21:20.894: D/Volley(14713): [1] Request.finish: 4181 ms: [ ] http://img.androidcookie.com/android/screen-shot-2014-02-17-at-11-57-29-pm.png 0x800c5bdc LOW 2 02-18 14:21:20.974: D/Volley(14713): [1] Request.finish: 4260 ms: [ ] http://img.androidcookie.com/android/st-vincent.jpg 0x800c5bdc LOW 3 02-18 14:21:20.994: D/dalvikvm(14713): GC_FOR_ALLOC freed 1914K, 6% free 68371K/72184K, paused 11ms, total 11ms 02-18 14:21:20.994: I/dalvikvm-heap(14713): Grow heap (frag case) to 72.368MB for 5843106-byte allocation 02-18 14:21:21.014: D/dalvikvm(14713): GC_FOR_ALLOC freed 1K, 5% free 74076K/77892K, paused 15ms, total 15ms 02-18 14:21:21.074: D/Volley(14713): [1] Request.finish: 4336 ms: [ ] http://img.androidcookie.com/android/underwater.gif 0x800c5bdc LOW 8 02-18 14:21:21.214: D/Volley(14713): [4945] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://img.androidcookie.com/android/screen-shot-2014-02-17-at-4-24-04-pm.png 0x800c5bdc LOW 5> [lifetime=4155], [size=482380], [rc=200], [retryCount=0] 02-18 14:21:21.244: D/Volley(14713): [1] Request.finish: 4494 ms: [ ] http://img.androidcookie.com/android/albarn-everyday-robots.jpg 0x800c5bdc LOW 9 02-18 14:21:21.274: D/Volley(14713): [1] Request.finish: 4551 ms: [ ] http://img.androidcookie.com/android/screen-shot-2014-02-17-at-4-24-04-pm.png 0x800c5bdc LOW 5 02-18 14:21:21.994: D/Volley(14713): [1] Request.finish: 5244 ms: [ ] http://img.androidcookie.com/android/macdemarco_baby.jpg 0x800c5bdc LOW 10 02-18 14:21:22.934: D/Volley(14713): [1] Request.finish: 6183 ms: [ ] http://img.androidcookie.com/android/nenehcherry_lank01.jpg 0x800c5bdc LOW 11 

当我第二次回到同一个片段时:刚刚访问过第二个片段,回到了第一个片段 – 没有太大的差距。

 02-18 14:27:46.164: D/dalvikvm(14713): GC_FOR_ALLOC freed 29047K, 26% free 91776K/122752K, paused 23ms, total 23ms 02-18 14:27:47.994: D/dalvikvm(14713): GC_FOR_ALLOC freed 2957K, 21% free 97010K/122752K, paused 20ms, total 20ms 02-18 14:27:48.274: D/Volley(14713): [1] Request.finish: 3244 ms: [ ] http://img.androidcookie.com/android/screen-shot-2014-02-17-at-2-58-16-pm.png 0x800c5bdc LOW 6 02-18 14:27:48.294: D/dalvikvm(14713): GC_FOR_ALLOC freed 2007K, 21% free 97932K/122752K, paused 14ms, total 14ms 02-18 14:27:48.324: D/Volley(14713): [4956] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://img.androidcookie.com/android/screen-shot-2014-02-17-at-11-57-29-pm.png 0x800c5bdc LOW 2> [lifetime=3272], [size=398563], [rc=200], [retryCount=0] 02-18 14:27:48.484: D/Volley(14713): [1] Request.finish: 3456 ms: [ ] http://img.androidcookie.com/android/screen-shot-2014-02-17-at-11-57-29-pm.png 0x800c5bdc LOW 2 02-18 14:27:48.974: D/dalvikvm(14713): GC_FOR_ALLOC freed 1030K, 15% free 104815K/122752K, paused 56ms, total 56ms 02-18 14:27:49.054: D/Volley(14713): [1] Request.finish: 4022 ms: [ ] http://img.androidcookie.com/android/screen-shot-2014-02-17-at-4-24-04-pm.png 0x800c5bdc LOW 5 02-18 14:27:49.314: D/Volley(14713): [1] Request.finish: 4276 ms: [ ] http://img.androidcookie.com/android/albarn-everyday-robots.jpg 0x800c5bdc LOW 9 02-18 14:27:49.374: D/Volley(14713): [1] Request.finish: 4325 ms: [ ] http://img.androidcookie.com/android/nenehcherry_lank01.jpg 0x800c5bdc LOW 11 02-18 14:27:49.404: D/Volley(14713): [1] Request.finish: 4355 ms: [ ] http://img.androidcookie.com/android/macdemarco_baby.jpg 0x800c5bdc LOW 10 02-18 14:27:49.654: D/dalvikvm(14713): GC_FOR_ALLOC freed 1456K, 12% free 108705K/122752K, paused 27ms, total 27ms 02-18 14:27:49.734: D/Volley(14713): [1] Request.finish: 4691 ms: [ ] http://img.androidcookie.com/android/underwater.gif 0x800c5bdc LOW 8 02-18 14:27:50.304: D/dalvikvm(14713): GC_FOR_ALLOC freed 11584K, 16% free 103314K/122752K, paused 47ms, total 47ms 02-18 14:27:50.334: D/Volley(14713): [1] Request.finish: 5281 ms: [ ] http://img.androidcookie.com/android/echo-and-the-bunnymen.jpg 0x800c5bdc LOW 12 

正如链接所示,Volley正在访问相同的URL。 Volley试图从服务器获取图像吗? 还是只是显示从caching加载的url?

如何制作Volleycaching图像? 如果现在还没有处理caching,用我上面的代码,我该怎么做才能实现呢?

我曾尝试将maxSize值从10更改为100*1024*1024 (100MB)但不会从Volley输出相同的值停止。

Volley没有直接提供caching选项。 你必须在Volley提供的工具中自己制作。 看到networking图像caching ,杰克·沃顿写了关于使用Volley的caching机制。 杰克·沃顿的“排球定制”

你可以在下面的链接中看到,继续使用Jake Wharton的DiskLruCache和VolleyImageCacheExample实现使用Volley的图像caching的问题。 它正在按预期工作,图像被caching。 感谢你的帮助。

JakeWharton的DiskLruCache – 如何实现与Volley?

你用Volley作为单身吗? 如果你不是,而且你没有为requestQueue使用一个共同的上下文,那么它将不会像你期望的那样工作。 Volley这部分的文档是特别无用的(至less自从我使用它之后)。 一旦configuration正确,它将从caching中读取/写入,就像你期望的那样。

下面是一个带有VolleySingleton类的GitHub项目,您可以使用示例: CypressNorth / Volley-Singleton

下面是一篇博客文章,详细介绍了设置: 为NetworkImageView设置Android Google Volley ImageLoader

考虑使用Androidbuild议在您的应用程序中加载图像的Glide。 Glide提供了自动图像caching。

在您的应用中添加滑翔:

步骤1)更新build.gradle文件

 dependencies { compile 'com.github.bumptech.glide:glide:3.6.1' compile 'com.android.support:support-v4:19.1.0' } 

步骤2)在清单文件中添加INTERNET权限

 <uses-permission android:name="android.permission.INTERNET" /> 

步骤3)在你的布局添加ImageView

 <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" > </ImageView> 

步骤4)活动中的滑翔用法

  //Initialize ImageView ImageView imageView = (ImageView) findViewById(R.id.imageView); //Loading image from below url into imageView Glide.with(this) .load("IMAGE URL HERE") .placeholder(R.drawable.placeholder) .error(R.drawable.imagenotfound) .override(200, 200); .centerCrop(); .into(imageView); 

详细了解Android Glide Library

你可以检查这个,我已经启用了L1和L2caching机制。

齐射与caching 。 请确保在响应头中启用caching控制。