[英]out of memory issue with volley's disk cache
在我的Android應用程序中,我使用Volley在自定義列表視圖中加載圖像。
當我刷新(刪除所有項目並加載tiems)listview很多次,我的應用程序被此消息殺死
我該怎么辦呢?
04-26 13:08:01.038:E / dalvikvm-heap(18040):1684947261字節分配的內存不足。 04-26 13:08:01.038:I / dalvikvm(18040):“Thread-11094”prio = 5 tid = 299 RUNNABLE 04-26 13:08:01.038:I / dalvikvm(18040):| group =“main”sCount = 0 dsCount = 0 obj = 0x439ea8e8 self = 0x7fb55250 04-26 13:08:01.038:I / dalvikvm(18040):| sysTid = 18946 nice = 10 sched = 0/0 cgrp = apps / bg_non_interactive handle = 2102160344 04-26 13:08:01.038:I / dalvikvm(18040):| state = R schedstat =(109248225 27367764 57)utm = 9 stm = 1 core = 2 04-26 13:08:01.038:I / dalvikvm(18040):at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache。 java:~316)04-26 13:08:01.038:I / dalvikvm(18040):at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526)04-26 13:08:01.038:I / dalvikvm(18040):at com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:549)04-26 13:08:01.038:I / dalvikvm(18040):at com.android.volley.toolbox。 DiskBasedCache $ CacheHeader.readHeader(DiskBasedCache.java:392)04-26 13:08:01.038:I / dalvikvm(18040):at com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:155)04-26 13:08:01.038:I / dalvikvm(18040):at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84)04-26 13:08:01.048:W / dalvikvm(18040):threadid = 299:線程退出時未捕獲異常(組= 0x41745da0)04-26 13:08:01.048:I / SpenGestureManager(847):setFocusWindow0 04-26 13:08:01.048:D / PointerIco n(847):setHoveringSpenIconStyle1 pointerType:10001iconType:1 flag:0 04-26 13:08:01.048:D / PointerIcon(847):setHoveringSpenCustomIcon IconType相同.1 04-26 13:08:01.048:E / AndroidRuntime(18040 ):致命異常:Thread-11094 04-26 13:08:01.048:E / AndroidRuntime(18040):進程:com.android.myapp,PID:18040 04-26 13:08:01.048:E / AndroidRuntime(18040) :java.lang.OutOfMemoryError 04-26 13:08:01.048:E / AndroidRuntime(18040):at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:316)04-26 13:08:01.048: E / AndroidRuntime(18040):at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526)04-26 13:08:01.048:E / AndroidRuntime(18040):at com.android.volley.toolbox .DiskBasedCache.readStringStringMap(DiskBasedCache.java:549)04-26 13:08:01.048:E / AndroidRuntime(18040):at com.android.volley.toolbox.DiskBasedCache $ CacheHeader.readHeader(DiskBasedCache.java:392)04- 26 13:08:01.048:E / AndroidRuntime(18040):at com.android.volley.toolbox.DiskBasedCa che.initialize(DiskBasedCache.java:155)04-26 13:08:01.048:E / AndroidRuntime(18040):at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84)04-26 13:08: 01.058:W / ActivityManager(847):強制完成活動com.android.myapp / .feedlist.Feedlist
你有沒有嘗試過
RequestQueue volleyQueue = Volley.newRequestQueue(this);
DiskBasedCache cache = new DiskBasedCache(getCacheDir(), 16 * 1024 * 1024);
volleyQueue = new RequestQueue(cache, new BasicNetwork(new HurlStack()));
volleyQueue.start();
從
https://stackoverflow.com/a/21299261/3399432
這會更改緩存大小
我在將圖像加載到ListView時遇到了類似的問題。 看來你必須自己處理緩存。
下面是我的實現,我在我的public View getView(int position, View convertView, ViewGroup parent)
適配器方法:
Bitmap cachedBitmap = imageCache.getBitmap(item.getPhotoUrl());
if (cachedBitmap != null)
{
holder.photo.setImageBitmap(cachedBitmap);
}
else {
ImageLoader imageLoader = new ImageLoader(Volley.newRequestQueue(this.context), imageCache);
imageLoader.get(item.getPhotoUrl(), new ImageLoader.ImageListener() {
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
if (item.getPhotoUrl() != null && response.getBitmap() != null)
imageCache.putBitmap(item.getPhotoUrl(), response.getBitmap());
}
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
//This is a custom imageview, you can create your own implementation for loading the image url to the imageview
holder.photo.setImageUrl(item.getPhotoUrl(), imageLoader);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.