On Dec 6, 10:23 pm, Romain Guy <romain...@android.com> wrote: > How come you still have a reference to your bitmap when a new Activity > is created?
That confuses me, too, actually. I really want to find out how I made this happen. > 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. What would be an example of "somewhere else" within the Activity? In my case, the "bitmap" reference appears in onCreate(), onDraw(), onPause(), as well inside an activity method, which is declared as native and is called from C code. The null checking, that I posted previously, happens in onCreate(). That is where I learned that I can still refer to the same bitmap from the previous run. > In addition, if your Activity is not garbage > collected, you probably have a leak somewhere and are holding onto the > Activity object. I am simply calling this activity via startActivity(). To my knowledge, I am not holding any references to the activity object. Some scenario I might be missing here? Help is appreciated. Thanks, -S. > > > > On Fri, Dec 4, 2009 at 7:19 PM, skominac <stevan.komi...@gmail.com> 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 <matt.h...@gmail.com> 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 <mathias...@gmail.com> > >> 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 <matt.h...@gmail.com> 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 <mathias...@gmail.com> 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 <mathias...@gmail.com> 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):VMwon't let us allocate 1111680 > >> > > > > bytes > >> > > > > 11-25 09:21:02.952: DEBUG/AndroidRuntime(2386): Shutting downVM > >> > > > > 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 exceedsVMbudget > >> > > > > 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 android-developers@googlegroups.com > >> > To unsubscribe from this group, send email to > >> > android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com> > >> > 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 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 > > -- > 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 -- 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