Android-Volleyball ist für mich eine outOfMemory-Ausnahme
Ich bin mit Volleyball zu zeigen, Bilder in horizontale swipe-Ansicht vom server, aber meine Bilder sind ziemlich groß, dass die Art und Weise bin ich immer eine Ausnahme von out of memory
Unten ist mein volley-Klasse:
public class Volley{
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
public Volley(Context ctx) {
Log.v("Volley", "Volley onCreate");
mRequestQueue = com.android.volley.toolbox.Volley.newRequestQueue(ctx);
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
ImageLoader.ImageCache imageCache = new ImageLoader.ImageCache() {
LruCache<String, Bitmap> imageCache = new LruCache<String, Bitmap>(cacheSize);
@Override
public void putBitmap(String key, Bitmap value) {
imageCache.put(key, value);
}
@Override
public Bitmap getBitmap(String key) {
return imageCache.get(key);
}
};
mImageLoader = new ImageLoader(mRequestQueue, imageCache);
}
public void clear(Context ctx) {
mRequestQueue.cancelAll(ctx);
mImageLoader = null;
mRequestQueue = null;
}
public RequestQueue getRequestQueue() {
return mRequestQueue;
}
public ImageLoader getImageLoader() {
return mImageLoader;
}}
Image loader-code:
image.setImageUrl(imagePhoto.url, getVolley(getContext()).getImageLoader());
public Volley getVolley(Context ctx) {
if(mVolley == null) {
mVolley = new Volley(getContext());
}
return mVolley;
}
Ausnahme:
> 06-10 22:14:27.462: E/AndroidRuntime(10060): FATAL EXCEPTION: Thread-29479
06-10 22:14:27.462: E/AndroidRuntime(10060): java.lang.OutOfMemoryError
06-10 22:14:27.462: E/AndroidRuntime(10060): at com.android.volley.toolbox.ByteArrayPool.getBuf(ByteArrayPool.java:101)
06-10 22:14:27.462: E/AndroidRuntime(10060): at com.android.volley.toolbox.PoolingByteArrayOutputStream.<init>(PoolingByteArrayOutputStream.java:53)
06-10 22:14:27.462: E/AndroidRuntime(10060): at com.android.volley.toolbox.BasicNetwork.entityToBytes(BasicNetwork.java:202)
06-10 22:14:27.462: E/AndroidRuntime(10060): at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:104)
06-10 22:14:27.462: E/AndroidRuntime(10060): at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:105)
InformationsquelleAutor AJit | 2013-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
habe ich dieses Problem beheben, um eine ordnungsgemäße cache, um die BitmapLruCache statt LruCache
}
hier ist der link:
Android-Volley ImageLoader - BitmapLruCache parameter?
Ich glaube nicht, das löst einen OOM Fehler, dies ist nur ein Weg, um bitmaps im app Speicher für schnelleren Zugriff. Siehe: stackoverflow.com/questions/5761547/...
ja sicher @Ziem Vergangenheit ein, wie von Ihrem questation hier.. Danke
Recht, sicher sein, dass Sie halten volley-Warteschlange und der loader als application level.
aber meiner Meinung nach sollte Volley Griff OOM selbst. Bin ich falsch? Ich initialisieren Volley-Warteschlange (Volley.newRequestQueue) und ImageLoader innerhalb der Application-Klasse.
InformationsquelleAutor AJit
Ich weiß nicht, wie Ihr ImageLoader umgesetzt wird, aber es wahrscheinlich lädt eine Bitmap. Versuchen Sie, die folgenden BitmapOption: inPurgeable zu wahren, während die Erzeugung der bitmap. So, die bitmap-Speicher werden gereinigt, wenn Sie sind niedrig auf den Speicher.
Blick auf diese Frage: Warum würde ich überhaupt NICHT verwenden BitmapFactory ist inPurgeable option?
InformationsquelleAutor Sebastian Breit
Ich bin nicht sicher, wie Sie umgesetzt swipe-Ansicht. Aber in den meisten Implementierungen (wie viewpager) es wird cache 3 oder mehr Elementen. So müssen Sie nicht wirklich brauchen, um die LRUCache zu Volleyball.
Entfernen Sie einfach den code für
imageCache
und Sie werden sehen, Verbesserungen in Speichernutzung.InformationsquelleAutor Mandar Limaye