How come you still have a reference to your bitmap when a new Activity is created? If you have this bitmap somewhere else than within the Activity, then it's perfectly normal that it's not de-allocated when the Activity disappears. In addition, if your Activity is not garbage collected, you probably have a leak somewhere and are holding onto the Activity object.
On Fri, Dec 4, 2009 at 7:19 PM, skominac <[email protected]> wrote: > I had a similar issue. Calling "finish()" on Activity does not in > itself deallocate memory allocated in Activity. The reason we notice > this problem with bitmaps is because they are often so large. > > Recycling bitmaps did not work for me either. > > So, instead, when my Activity starts, and before I create a new > bitmap, I do the following check: > > if (bitmap == null) { > bitmap = Bitmap.createBitmap(width, height, > Bitmap.Config.ARGB_8888); > } else { > bitmap.eraseColor(0); // just clear pixels > } > > This way, I reuse the previously allocated bitmap in a subsequent run > of the Activity. (My Activity only needs one bitmap.) > > Not sure if this is the best way to do it, but it works for me. > > -S. > > On Nov 25, 11:43 am, Matt Hall <[email protected]> wrote: >> Yeah, we've had a similar issue before. One thing you can try is to call >> recycle() on the last frame of your animation before you replace it. This is >> normally called by the garbage collector and works fine when you're not >> close to the memory limit, but it sounds like there might be cases where you >> temporarily go over the limit and the GC doesn't get to the bitmaps in time. >> >> Matt >> >> On Wed, Nov 25, 2009 at 2:37 PM, Matt Kanninen <[email protected]> wrote: >> > Matt, >> >> > So in this case I definitely am frequently loading and unloading small >> > images. Those 10 id's all point at different states in our >> > animation. I can reduce the quality of our animation by reducing the >> > views, and decrease how often I stumble down this cow path: >> >> > but I only posted this stack trace because it was new, this happens >> > anytime my app is run for more then half an hour, or 5 mins on the >> > droid. The droid uses the same apk, same images, and 2 slightly >> > different xmls (we added margins to our Droid xml). >> >> >http://groups.google.com/group/android-developers/browse_thread/threa... >> >> > or to quote myself: >> > " >> > If my app runs for more then half an hour on the G1 it will fail on >> > inflating views from xml, giving an error about insufficient memory >> > creating a bitmap. Another issue, which may be a side effect is that >> > global static strings that are assigned at startup become null. >> >> > I have worked around that by throwing up setters around those statics >> > that also store them as a private preference, and thrown up getters >> > that read the preference in case of null. >> >> > The root cause of all of my issues may be that when I call release on >> > my MediaRecorder it sometimes hangs. No crash it just never returns, >> > stalling the thread. I have worked around that by calling release in >> > a thread that only does that. >> >> > Is anyone else seeing and working around issues like these? I could >> > use some advice. >> > " >> >> > -Matt K >> >> > On Nov 25, 10:07 am, Matt Hall <[email protected]> wrote: >> > > How big (dimensions) are the graphics Matt? If they're not very big >> > > then I'm guessing you have bitmap memory used elsewhere in the app >> > > that's putting you close to the max. Bitmap memory is different than >> > > your heap memory, so it's management is hidden from you a little more >> > > but basically this error means you have too many graphics loaded at >> > > once, or are unloading and loading a lot of graphics in a row so the >> > > finalizer can't reclaim the bitmap memory in time. >> >> > > Matt >> >> > > On Nov 25, 12:46 pm, Matt Kanninen <[email protected]> wrote: >> >> > > > <a href="http://code.google.com/p/android/issues/detail?id=5045">Issue >> > > > 5045</a> >> >> > > >http://code.google.com/p/android/issues/detail?id=5045 >> >> > > > On Nov 25, 9:37 am, Matt Kanninen <[email protected]> wrote: >> >> > > > > This: >> > > > > private static final int[] glowDrawableIds={ >> > > > > R.drawable.graphic_microphoneglow_01, >> > > > > R.drawable.graphic_microphoneglow_02, >> > > > > R.drawable.graphic_microphoneglow_03, >> > > > > R.drawable.graphic_microphoneglow_04, >> > > > > R.drawable.graphic_microphoneglow_05, >> > > > > R.drawable.graphic_microphoneglow_06, >> > > > > R.drawable.graphic_microphoneglow_07, >> > > > > R.drawable.graphic_microphoneglow_08, >> > > > > R.drawable.graphic_microphoneglow_09, >> > > > > R.drawable.graphic_microphoneglow_10 >> > > > > }; >> > > > > ... >> > > > > View glow = findViewById(R.id.glow); >> > > > > .. >> >> > > > > glow.setBackgroundResource(glowDrawableIds[scale]); >> >> > > > > is causing >> >> > > > > 11-25 09:21:02.046: WARN/UsageStats(1018): Failed to persist new >> > stats >> > > > > 11-25 09:21:02.694: DEBUG/dalvikvm(2386): GC freed 298 objects / >> > 15656 >> > > > > bytes in 61ms >> > > > > 11-25 09:21:02.952: ERROR/dalvikvm-heap(2386): 1111680-byte external >> > > > > allocation too large for this process. >> > > > > 11-25 09:21:02.952: ERROR/(2386): VM won't let us allocate 1111680 >> > > > > bytes >> > > > > 11-25 09:21:02.952: DEBUG/AndroidRuntime(2386): Shutting down VM >> > > > > 11-25 09:21:02.952: WARN/dalvikvm(2386): threadid=3: thread exiting >> > > > > with uncaught exception (group=0x4001b180) >> > > > > 11-25 09:21:02.952: ERROR/AndroidRuntime(2386): Uncaught handler: >> > > > > thread main exiting due to uncaught exception >> > > > > 11-25 09:21:03.014: ERROR/AndroidRuntime(2386): >> > > > > java.lang.OutOfMemoryError: bitmap size exceeds VM budget >> > > > > 11-25 09:21:03.014: ERROR/AndroidRuntime(2386): at >> > > > > android.graphics.Bitmap.nativeCreate(Native Method) >> > > > > 11-25 09:21:03.014: ERROR/AndroidRuntime(2386): at >> > > > > android.graphics.Bitmap.createBitmap(Bitmap.java:468) >> > > > > 11-25 09:21:03.014: ERROR/AndroidRuntime(2386): at >> > > > > android.graphics.Bitmap.createBitmap(Bitmap.java:435) >> > > > > 11-25 09:21:03.014: ERROR/AndroidRuntime(2386): at >> > > > > android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340) >> > > > > 11-25 09:21:03.014: ERROR/AndroidRuntime(2386): at >> > > > > android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488) >> > > > > 11-25 09:21:03.014: ERROR/AndroidRuntime(2386): at >> > > > > android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462) >> > > > > 11-25 09:21:03.014: ERROR/AndroidRuntime(2386): at >> >> > android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java: >> > > > > 323) >> > > > > 11-25 09:21:03.014: ERROR/AndroidRuntime(2386): at >> > > > > android.graphics.drawable.Drawable.createFromResourceStream >> > > > > (Drawable.java:697) >> > > > > 11-25 09:21:03.014: ERROR/AndroidRuntime(2386): at >> > > > > android.content.res.Resources.loadDrawable(Resources.java:1705) >> > > > > 11-25 09:21:03.014: ERROR/AndroidRuntime(2386): at >> > > > > android.content.res.Resources.getDrawable(Resources.java:580) >> > > > > 11-25 09:21:03.014: ERROR/AndroidRuntime(2386): at >> > > > > android.view.View.setBackgroundResource(View.java:7187) >> >> > -- >> > You received this message because you are subscribed to the Google >> > Groups "Android Developers" group. >> > To post to this group, send email to [email protected] >> > To unsubscribe from this group, send email to >> > [email protected]<android-developers%[email protected]> >> > For more options, visit this group at >> >http://groups.google.com/group/android-developers?hl=en >> >> > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > -- Romain Guy Android framework engineer [email protected] 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 -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

