I am working on an application in which I have images loaded asynchronously for SlideShows. One slide show contains 10 slides, so 10 images are uploaded when you open the slide show. After I scroll through 10-15 slide shows, I start to receive warnings about memory and after an exception as a result of failures in the trace and application.
Here is the trace:
12-23 12:23:53.124: ERROR/dalvikvm-heap(3067): 45850-byte external allocation too large for this process. 12-23 12:23:53.134: ERROR/dalvikvm(3067): Out of memory: Heap Size=13127KB, Allocated=11913KB, Bitmap Size=11407KB 12-23 12:23:53.134: ERROR/GraphicsJNI(3067): VM won't let us allocate 45850 bytes 12-23 12:23:53.134: DEBUG/skia(3067): --- decoder->decode returned false 12-23 12:23:53.134: WARN/dalvikvm(3067): threadid=46: thread exiting with uncaught exception (group=0x400259f8) 12-23 12:23:53.134: ERROR/AndroidRuntime(3067): FATAL EXCEPTION: Thread-1016 12-23 12:23:53.134: ERROR/AndroidRuntime(3067): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 12-23 12:23:53.134: ERROR/AndroidRuntime(3067): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 12-23 12:23:53.134: ERROR/AndroidRuntime(3067): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:468) 12-23 12:23:53.134: ERROR/AndroidRuntime(3067): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:332) 12-23 12:23:53.134: ERROR/AndroidRuntime(3067): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697) 12-23 12:23:53.134: ERROR/AndroidRuntime(3067): at android.graphics.drawable.Drawable.createFromStream(Drawable.java:657) 12-23 12:23:53.134: ERROR/AndroidRuntime(3067): at com.nbcu.myApp.appsupport.AsyncImageLoader.loadImageFromUrl(AsyncImageLoader.java:98) 12-23 12:23:53.134: ERROR/AndroidRuntime(3067): at com.nbcu.myApp.appsupport.AsyncImageLoader$2.run(AsyncImageLoader.java:70) 12-23 12:23:53.154: WARN/ActivityManager(96): Force finishing activity com.nbcu.myApp.activities/com.nbcu.myApp.controllers.StoriesListController 12-23 12:23:53.224: ERROR/dalvikvm-heap(3067): 45850-byte external allocation too large for this process. 12-23 12:23:53.234: DEBUG/SurfaceFlinger(96): Layer::setBuffers(this=0x2fabc0), pid=96, w=1, h=1 12-23 12:23:53.234: ERROR/dalvikvm(3067): Out of memory: Heap Size=13127KB, Allocated=11948KB, Bitmap Size=11407KB 12-23 12:23:53.234: ERROR/GraphicsJNI(3067): VM won't let us allocate 45850 bytes 12-23 12:23:53.234: ERROR/Error(3067): Message = java.lang.OutOfMemoryError: bitmap size exceeds VM budget
Image Upload Code:
public void run() { Looper.prepare(); for (int i = 0; i < slides.size(); i++) { try { final SlideShowItem story = slides.get(i); if (story.getImage() == null) { Drawable cachedImage = Utils.database.getRSSImage(Constants.StoriesTable, story.getItemId()); if (cachedImage != null) { story.setImage(cachedImage); } else { cachedImage = asyncImageLoader.loadDrawable(story.getImagePath(), new ImageCallback() { public void imageLoaded(Drawable imageDrawable, String imageUrl) { story.setImage(imageDrawable); Utils.database.storeRSSItemImage(Constants.StoriesTable, imageDrawable, story.getItemId()); } }); } } Thread.sleep(500); } catch (Exception e) { e.printStackTrace(); } } Looper.loop(); }
Code for loadDrawable ():
public Drawable loadDrawable(final String imageUrl, final ImageCallback imageCallback) { final Handler handler = new Handler() { public void handleMessage(Message message) { imageCallback.imageLoaded((Drawable) message.obj, imageUrl); } }; new Thread() { public void run() { Drawable drawable = loadImageFromUrl(imageUrl);
and code for loadImageFromURL ():
public static Drawable loadImageFromUrl(String url) { Drawable image = null; try { InputStream in = (java.io.InputStream) new java.net.URL(url).getContent(); if (in != null) { image = Drawable.createFromStream(in, "image"); } in.close(); } catch (Exception ex) {
After downloading the images, they are cached. I cannot find a workaround to avoid this exception. What could be the reason? I also tried to set the images as images when the activity is destroyed, but nothing has been done for me? Any help is appreciated. Thank you in advance.