I am setting the Background (using view.setBackgroundResource()) of about 5 views with pngs that fill up the entire screen (as a backdrop). I scroll between these 5 views and thus want to keep them in cache (I use view.setChildrenCacheEnabled()) but I run into the OutOfMemoryError: bitmap exceeds VM budget error. Is there a way to overcome it?
Rohit n Dec 17 2008, 11:20 am, Mark K <mark.ka...@gmail.com> wrote: > Thanks for the beta on the bitmap,recycle(), it works! Before > processing the next bitmap I use this code to free up memory. I have a > class level Bitmap object. > > Bitmap bm;// class level > > if (bm!=null) > { > bm.recycle(); > try > { > Thread.sleep(100); > } > catch(Exception e){} > bm=null; > System.gc(); > try > { > Thread.sleep(100); > } > catch(Exception e){} > } > // create new bitmap and start again. > > Thanks again, it works! > > On Dec 17, 5:56 am, Mike Reed <r...@google.com> wrote: > > > Its a little raw, but if you know you're absolutely done using a given > > bitmap object, you can call bitmap.recycle(). This immediately frees > > up the memory associated with the bitmap, and marks it as "dead", > > meaning it cannot be referenced again (i.e. don't try to draw or get/ > > set its pixels anymore). > > > i.e. > > > for (all of my big images) { > > Bitmap b = decode(...); > > canvas.drawBitmap(b, ...); > > b.recycle(); > > // yikes, don't reference b again) > > > } > > > On Dec 15, 2008, at 9:04 PM, Mark K wrote: > > > Is there a work around for this problem? Something I need to do > > differently perhaps? It seems like garbage collection is not occurring > > between successive bitmap decoding operations. Explicitly calling gc() > > does not seem to help. This is particularly a problem on the G1, > > because there is no way to reduce the camera resolution, all of the > > camera pictures are large. If I loop through a directory of pictures > > taken by the camera and use BitmapFactory.decodeFile(), I will get an > > out of memory error on the 2nd or 3rd iteration. Since I am only > > displaying/decoding one bitmap at a time I would hope that garbage > > collection would free up the memory between operations such that this > > does not occur. Any help would be greatly appreciated. Here's the code > > I use: This code runs a slide show of the images in the camera > > directory, it uses Handler.postDelayed() to render each picture. Is > > there anyway to tweak the code to get rid of the out of memory > > problem. > > > public boolean slideShow() > > { > > String baseDir = "/sdcard/dcim/Camera/"; > > long showTime = 1500; > > > File dir = new File(baseDir); > > File[] pics = dir.listFiles(); > > for ( int i=0; i<pics.length; i++ ) > > { > > String pic=baseDir+pics[i].getName(); > > handler.postDelayed(new ShowSlide(pic), i*showTime); > > } > > return true; > > } > > > class ShowSlide extends Thread > > { > > String pc=""; > > public ShowSlide(String pc) > > { > > this.pc=pc; > > } > > public void run() > > { > > System.out.println("Showing picture: "+pc.toString()); > > displayPicture(pc); > > } > > } > > > public boolean displayPicture(String filepath) > > { > > File file = new File(filepath); > > BitmapFactory bfac = new BitmapFactory(); > > try > > { > > bm = bfac.decodeFile(filepath);// out of memory error occurs > > here! > > handler.post(new SetImage(iView, bm)); > > } > > catch(Exception e) > > { > > Log.e(TAG,"display picture failed: "+filepath+" "+e.toString > > ()); > > e.printStackTrace(); > > return false; > > } > > > return true; > > } > > > class SetImage extends Thread > > { > > ImageView vv; > > Bitmap bb; > > public SetImage(ImageView vv, Bitmap bb) > > { > > this.vv=vv; > > this.bb=bb; > > } > > public void run() > > { > > vv.setImageBitmap(bb); > > } > > } > > > On Dec 15, 2:48 pm, Romain Guy <romain...@google.com> wrote: > > > >> I've run into this exact same problem a number of times myself. Not > > >> sure if its a bug or just a limitation of the jvm, can't seem to > > >> process more than a few large bitmaps without this occuring, this > > >> always seems to occur when decoding bitmaps from file. > > > > Neither, you are just using too much memory. > > > > -- > > > Romain Guy > > > Android framework engineer > > > romain...@android.com > > > > Note: please don't send private questions to me, as I don't have time > > > to provide private support. All such questions should be posted on > > > public forums, where I and others can see and answer them- Hide quoted > > > text - > > > - Show quoted text - > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---