2014-04-26 12 views
7

Nella mia app per Android sto utilizzando Volley per caricare le immagini in listview personalizzate.di memoria insufficiente con la cache del disco di volley

quando rinfresco (eliminare tutti gli elementi e tiems carico) ListView molte volte, mia app viene ucciso con questo messaggio

come posso risolvere il problema?

04-26 13: 08: 01.038: E/dalvikvm-heap (18040): Memoria insufficiente su un'assegnazione di 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 auto = 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): su com.android.volley.toolbox.DiskBasedCache.streamToBytes (DiskBasedCache .java: ~ 316) 04-26 13: 08: 01.038: I/dalvikvm (18040): in com.android.volley.toolbox.DiskBasedCache.readString (DiskBasedCache.java:526) 04-26 13:08: 01.038: I/dalvikvm (18040): in com.android.volley.toolbox.DiskBasedCache.readStringStringMap (DiskBasedCache.java:549) 04-26 13: 08: 01.038: I/dalvikvm (18040): in com.android. volley.toolbox.DiskBasedCache $ CacheHeader.readHeader (DiskBasedCache.java:392) 04-26 13: 08: 01.038: I/dalvikvm (18040): su com.android.volley.toolbox.DiskBasedCache.initialize (DiskBasedCache.java: 155) 04-26 13: 08: 01.038: I/dalvikvm (18040): in com.android.volley.CacheDispatcher.run (CacheDispatcher.java:84) 04-26 13: 08: 01.048: W/dalvikvm (18040): threadid = 299: thread in uscita con eccezione non rilevata (gruppo = 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 è lo stesso.1 04 -26 13: 08: 01.048: E/AndroidRuntime (18040): FATAL EXCEPTION: Thread-11094 04-26 13: 08: 01.048: E/AndroidRuntime (18040): Processo: 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): su com.android.volley.toolbox.DiskBasedCache.streamToBytes (DiskBasedCache.java:316) 04-26 13: 08: 01.048: E/AndroidRuntime (18040): in com.android.volley.toolbox.DiskBasedCache.readString (DiskBasedCache.java:526) 04-26 13: 08: 01.048: E/AndroidRuntime (18040): in com.android.volley.toolbox.DiskBasedCache.readStringStringMap (DiskBasedCache.java:549) 04-26 13: 08: 01.048: E/AndroidRuntime (18040): a com.android.volley.toolbox.DiskBasedCache $ CacheHeader.readHeader (DiskBasedCache.java:392) 04-26 13: 08: 01.048: E/AndroidRuntime (18040): a com.android.volley.toolbox.DiskBasedCache.initialize (DiskBasedCache.java:155) 04-26 13:08: 01.048: E/AndroidRuntime (18040): in com.android.volley.CacheDispatcher.run (CacheDispatcher.java:84) 04-26 13: 08: 01.058: W/ActivityManager (847): Forza attività di finitura com.android. frontend/.feedlist.Feedlist

+0

alcuna soluzione a questo? – CQM

+1

Questa domanda ha quasi 2 anni ma sto ancora cercando una soluzione. [Questa domanda] (https://stackoverflow.com/questions/24095909/volley-out-of-memory-error-weird-allocation-attempt/24422376#comment54546831_24422376) è simile ma la risposta non funziona per me. OP hai mai capito? – yuval

risposta

1

Hai provato

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

da

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

Questo cambia la dimensione della cache

1

ho avuto un problema molto simile con il caricamento delle immagini in un ListView. Sembra che tu debba gestire personalmente il pull dalla cache.

Qui di seguito è la mia realizzazione, che ho nel mio metodo public View getView(int position, View convertView, ViewGroup parent) adattatore:

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