So I did get the crashes to stop, and I have a idea of why it works...
anyways.. I updated the onWindowFocusChange set the backGroundDrawable
to null when the app loses focus.  I also do this on the onDestroy()
and onPause() methods as well.

My guess is that the app goes into pause mode and when restarted since
I was reattaching the same animation to the ImageView it was causing a
leak.

Note this ImageView and Animation were not static variables they were
loaded only on the onWindowFocusChange event.  I made the assumption
since I was not letting my ImageView and Animation be created as
static variables I wouldn't leak the Context, but apparently the
recreation of the animation attachment to the ImageView was for some
reason, this I'm not 100% sure on, but it seems to be the case.


On Dec 10, 7:53 pm, Romain Guy <[email protected]> wrote:
> DDMS has a feature to dump the Java heap. You can then analyze is
> using tools like hat, MAT, JProfiler, etc.
>
>
>
> On Thu, Dec 10, 2009 at 4:17 PM, Matt Kanninen <[email protected]> wrote:
> > Got any advice on tools to use to debug the most likely situation
> > you've described?  I'm at the point where I've ruled out static
> > variables.
>
> > I'm working on code that started with Android 1.0, and has had a
> > series of developers since.  Good code analysis tools could help
> > immensely.  It beats re writing every class.
>
> > On Dec 10, 3:47 pm, Romain Guy <[email protected]> wrote:
> >> If there's an OutOfMemoryError, it's most likely that the app is using
> >> too much memory and/or leaking. Filing a bug won't help.
>
> >> On Thu, Dec 10, 2009 at 3:43 PM, Matt Kanninen <[email protected]> 
> >> wrote:
> >> > Best of luck.  I recommend you create a very small test application to
> >> > reproduce the bug, and submit it to b.android.com.
>
> >> > On Dec 10, 12:52 pm, Mark Hansen <[email protected]> wrote:
> >> >> So I want to start an animation when my application starts that always
> >> >> visible in the application.  So reading about the AnimationDrawable it
> >> >> was stated to use onWindowFocusChanged instead of onCreate() to ensure
> >> >> that animation would start properly in the UI thread.
>
> >> >>         @Override
> >> >>         public void onWindowFocusChanged(boolean hasFocus) {
> >> >>                 super.onWindowFocusChanged(hasFocus);
>
> >> >>                 AnimationDrawable cam;
> >> >>                 ImageView iv = 
> >> >> (ImageView)findViewById(R.id.ImageViewFuzzAnimation);
> >> >>                 iv.setBackgroundResource(R.anim.fuzz_animation);
> >> >>                 cam = (AnimationDrawable)iv.getBackground();
> >> >>                 cam.start();
>
> >> >>         }
>
> >> >> This works fine, but if I leave my application and come back I get a
> >> >> out of memory error, below is the log..
>
> >> >> Can anyone help me out on what I may be doing wrong here?
>
> >> >> 12-10 15:52:14.365: ERROR/dalvikvm-heap(3102): 805600-byte external
> >> >> allocation too large for this process.
> >> >> 12-10 15:52:14.373: ERROR/(3102): VM won't let us allocate 805600
> >> >> bytes
> >> >> 12-10 15:52:14.373: DEBUG/skia(3102): --- decoder->decode returned
> >> >> false
> >> >> 12-10 15:52:16.490: DEBUG/dalvikvm(1570): GC freed 797 objects / 43592
> >> >> bytes in 94ms
> >> >> 12-10 15:52:20.147: DEBUG/AndroidRuntime(3102): Shutting down VM
>
> >> >> 12-10 15:52:20.147: ERROR/AndroidRuntime(3102): Uncaught handler:
> >> >> thread main exiting due to uncaught exception
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):
> >> >> java.lang.OutOfMemoryError: bitmap size exceeds VM budget
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:447)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:
> >> >> 323)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.graphics.drawable.Drawable.createFromResourceStream
> >> >> (Drawable.java:697)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.content.res.Resources.loadDrawable(Resources.java:1705)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.content.res.Resources.getDrawable(Resources.java:580)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.graphics.drawable.AnimationDrawable.inflate
> >> >> (AnimationDrawable.java:265)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:
> >> >> 788)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.graphics.drawable.Drawable.createFromXml(Drawable.java:729)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.content.res.Resources.loadDrawable(Resources.java:1690)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.content.res.Resources.getDrawable(Resources.java:580)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.view.View.setBackgroundResource(View.java:7187)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> com.stonedonkey.santatracker.ActivityGUI.onWindowFocusChanged
> >> >> (ActivityGUI.java:170)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> com.android.internal.policy.impl.PhoneWindow
> >> >> $DecorView.onWindowFocusChanged(PhoneWindow.java:1969)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.view.View.dispatchWindowFocusChanged(View.java:3731)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:656)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.view.ViewRoot.handleMessage(ViewRoot.java:1819)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.os.Handler.dispatchMessage(Handler.java:99)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.os.Looper.loop(Looper.java:123)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> android.app.ActivityThread.main(ActivityThread.java:4338)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> java.lang.reflect.Method.invokeNative(Native Method)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> java.lang.reflect.Method.invoke(Method.java:521)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
> >> >> (ZygoteInit.java:860)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
> >> >> 12-10 15:52:20.232: ERROR/AndroidRuntime(3102):     at
> >> >> dalvik.system.NativeStart.main(Native Method)
>
> >> > --
> >> > 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
>
> --
> 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

Reply via email to