最近使用volley加载网络图片,可是却时常发生以下问题:
EXCEPTION TYPE: java.lang.OutOfMemoryError
EXCEPTION MSG: Failed to allocate a 1667591281 byte allocation with 4194304 free bytes and 296MB until OOM
EXCEPTION STACK:
com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:316)
com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526)
com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:548)
com.android.volley.toolbox.DiskBasedCache$CacheHeader.readHeader(DiskBasedCache.java:392)
com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:155)
com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84)
解决办法:volley本来就不建议用来缓存太多的数据。遇到这种情况,目前的最好的解决方案貌似只有暴力清理缓存。
在获取请求队列的时候,拿到DiskBasedCache的引用,然后通过ClearCacheRequest来清理掉volley的缓存。
实例代码见第一代码原创文章https://www.diyidaima.com/android/113.html