2014-04-26 18 views
7

Trong ứng dụng của tôi dành cho Android, tôi đang sử dụng Volley để tải hình ảnh trong chế độ xem danh sách tùy chỉnh.hết vấn đề bộ nhớ với bộ nhớ đệm đĩa của volley

khi tôi làm mới (xóa tất cả các mặt hàng và tiems tải) listview nhiều lần, ứng dụng của tôi bị giết với thông điệp này

làm thế nào tôi có thể sửa chữa nó?

04-26 13: 08: 01.038: E/dalvikvm-heap (18040): Hết bộ nhớ trên phân bổ 1684947261 byte. 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 lịch = 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): tại com.android.volley.toolbox.DiskBasedCache.streamToBytes (DiskBasedCache .java: ~ 316) 04-26 13: 08: 01.038: I/dalvikvm (18040): tại com.android.volley.toolbox.DiskBasedCache.readString (DiskBasedCache.java WEBC26) 04-26 13:08: 01.038: I/dalvikvm (18040): tại com.android.volley.toolbox.DiskBasedCache.readStringStringMap (DiskBasedCache.java challenges49) 04-26 13: 08: 01.038: I/dalvikvm (18040): tại com.android. volley.toolbox.DiskBasedCache $ CacheHeader.readHeader (DiskBasedCache.java:392) 04-26 13: 08: 01.038: I/dalvikvm (18040): tại com.android.volley.toolbox.DiskBasedCache.initialize (DiskBasedCache.java: 155) 04-26 13: 08: 01.038: I/dalvikvm (18040): tại com.android.volley.CacheDispatcher.run (CacheDispatcher.java:84) 04-26 13: 08: 01.048: W/dalvikvm (18040): threadid = 299: thoát ra với ngoại lệ không bắt buộc (nhóm = 0x41745da0) 04-26 13: 08: 01.048: I/SpenGestureManager (847): setFocusWindow0 04-26 13: 08: 01.048: D/PointerIcon (847): setHoveringSpenIconStyle1 pointerType: 10001iconType: 1 flag: 0 04-26 13: 08: 01.048: D/PointerIcon (847): setHoveringSpenCustomIcon IconType giống nhau.1 04 -26 13: 08: 01.048: E/AndroidRuntime (18040): LOẠI TRỪ CHẤT LƯỢNG: Thread-11094 04-26 13: 08: 01.048: E/AndroidRuntime (18040): Quy trình: 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): tại com.android.volley.toolbox.DiskBasedCache.streamToBytes (DiskBasedCache.java:316) 04-26 13: 08: 01.048: E/AndroidRuntime (18040): tại com.android.volley.toolbox.DiskBasedCache.readString (DiskBasedCache.java WEBC26) 04-26 13: 08: 01.048: E/AndroidRuntime (18040): tại com.android.volley.toolbox.DiskBasedCache.readStringStringMap (DiskBasedCache.java:049) 04-26 13: 08: 01.048: E/AndroidRuntime (18040): tại com.android.volley.toolbox.DiskBasedCache $ CacheHeader.readHeader (DiskBasedCache.java:392) 04-26 13: 08: 01.048: E/AndroidRuntime (18040): tại com.android.volley.toolbox.DiskBasedCache.initialize (DiskBasedCache.java:155) 04-26 13:08: 01.048: E/AndroidRuntime (18040): tại com.android.volley.CacheDispatcher.run (CacheDispatcher.java:84) 04-26 13: 08: 01.058: W/ActivityManager (847): Buộc hoàn thành hoạt động com.android. myapp/.feedlist.Feedlist

+0

bất kỳ giải pháp này? – CQM

+1

Câu hỏi này đã gần 2 năm nhưng tôi vẫn đang tìm kiếm giải pháp cho nó. [Câu hỏi này] (https://stackoverflow.com/questions/24095909/volley-out-of-memory-error-weird-allocation-attempt/24422376#comment54546831_24422376) là tương tự nhưng câu trả lời không hiệu quả đối với tôi. OP bạn đã bao giờ tìm ra? – yuval

Trả lời

1

Các bạn đã thử

RequestQueue volleyQueue = Volley.newRequestQueue(this); 
DiskBasedCache cache = new DiskBasedCache(getCacheDir(), 16 * 1024 * 1024); 
volleyQueue = new RequestQueue(cache, new BasicNetwork(new HurlStack())); 
volleyQueue.start(); 

từ

https://stackoverflow.com/a/21299261/3399432

này thay đổi kích thước bộ nhớ cache

1

Tôi đã gặp một vấn đề rất giống với tải hình ảnh vào một ListView. Có vẻ như bạn phải xử lý việc kéo bộ nhớ cache của chính mình.

Dưới đây là thực hiện của tôi mà tôi có trong phương pháp public View getView(int position, View convertView, ViewGroup parent) bộ chuyển đổi của tôi:

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); 
}