I'm seeing the exact same error only I'm not even storing an image.

I have an ImageView that loads an image from the users picture gallery
on the phone, once the image is loaded using setImageUri() when I
change orientation I get the exact same error songs described.

I don't understand what's hogging the memory since the image is
already on the device, it's not being copied...

Is there something I should do to the ImageView to clear out it's
bitmap or something?

confused....

On Oct 13, 5:40 pm, songs <[EMAIL PROTECTED]> wrote:
> I think we might be talking about a couple of different things.  I've
> got a handle on the leak.  What I'm saying is that there seem to be
> side-effects that change the assumptions of how the think about the
> lifecycle.  From the perspective of the lifecycle and side-effects, I
> would have expected hitting the curved back arrow and then starting
> the app to have had the same effect as changing the orientation
> (except that the former would have had no saved state passed in and
> the latter would).  This isn't the case.  One has side-effects that
> the other doesn't so they behave differently.
>
> What about the lag?  Even with cleaning up the thread, since it takes
> a couple of seconds for the system to actually reclaim the memory, a
> zealous user can still cause an OutOfMemoryError.
>
> On Oct 13, 3:05 pm, hackbod <[EMAIL PROTECTED]> wrote:
>
> > You need to make sure you have cleaned up everything by the time you
> > return from onDestroy().  If you do that, there will not be a leak.
>
> > On Oct 13, 1:46 pm, songs <[EMAIL PROTECTED]> wrote:
>
> > > This is a little confusing then, though.  The animation thread dies as
> > > expected when I stop the application using the back arrow, but does
> > > not die (without being explicitly killed) when I flip the
> > > orientation.  So some extra cleaning up must be happening for one that
> > > isn't happening for the other.
>
> > > Also, any ideas on the lag?
>
> > > On Oct 12, 11:00 am, hackbod <[EMAIL PROTECTED]> wrote:
>
> > > > onCreate -is- called when the activity is starting fresh.  When an
> > > > orientation switch happens, the old activity is removed through
> > > > onPause()->onStop()->onDestroy(), and a new instance created in the
> > > > new orientation.
>
> > > > On Oct 11, 10:15 pm, songs <[EMAIL PROTECTED]> wrote:
>
> > > > > Tracked the leak down to my animation thread which was getting
> > > > > recreated on every onCreate.  From the lifecycle docs, I had thought
> > > > > that onCreate only got called when the activity was starting fresh and
> > > > > any old instances had died (and killed everything associated with
> > > > > it).  Since this apparently isn't always the case, I'm now managing
> > > > > this thread more actively.
>
> > > > > This mostly solved the issue except for two things - I can still get
> > > > > the memory issue to happen (I just have to try harder), and after
> > > > > changing the orientation it takes about 2-3 seconds before the app
> > > > > will respond to touch events.  From watching the heap using DDMS,
> > > > > there's a good a couple of seconds between the thread dying and its
> > > > > resources getting cleaned up.  Because of this lag, if I quickly
> > > > > switch back and forth between orientations I can get the memory error
> > > > > to happen.
>
> > > > > These remaining issues are kind of on outside of expected behavior so
> > > > > I'm not too worried about things now, but there's gotta be something
> > > > > I'm missing that would help button this up a little tighter.
>
> > > > > - Steve
>
> > > > > On Oct 10, 1:53 am, songs <[EMAIL PROTECTED]> wrote:
>
> > > > > > Interesting.  Thanks for the lead.  I'll look into this an report 
> > > > > > back
> > > > > > either way.
>
> > > > > > On Oct 10, 1:48 am, "Romain Guy" <[EMAIL PROTECTED]> wrote:
>
> > > > > > > Then you should check carefully where exactly you pass your 
> > > > > > > Activity
> > > > > > > (or Context) to other classes/APIs, etc. The Context is used by 
> > > > > > > many
> > > > > > > different classes in the Android framework and if you somehow 
> > > > > > > "leak"
> > > > > > > the Context, you leak all the views, images, etc. Your issue is 
> > > > > > > very
> > > > > > > similar to several issues we fixed over the past few months: on 
> > > > > > > each
> > > > > > > rotation the Context leaks and everything leaks with it. You can 
> > > > > > > use
> > > > > > > DDMS to check how the heap is growing after each rotation, it 
> > > > > > > should
> > > > > > > tell you whether this is the problem or not.
>
> > > > > > > On Fri, Oct 10, 2008 at 1:44 AM, songs <[EMAIL PROTECTED]> wrote:
>
> > > > > > > > Nope, the only static variables I have are constants.  I do 
> > > > > > > > keep an
> > > > > > > > array of Drawable in the view, but that's an instance variable.
>
> > > > > > > > On Oct 10, 1:14 am, "Romain Guy" <[EMAIL PROTECTED]> wrote:
> > > > > > > >> Looks like you're leaking memory somewhere. Do you keep a 
> > > > > > > >> static cache
> > > > > > > >> somewhere in your app?
>
> > > > > > > >> On Thu, Oct 9, 2008 at 10:02 PM, songs <[EMAIL PROTECTED]> 
> > > > > > > >> wrote:
>
> > > > > > > >> > Hi,
>
> > > > > > > >> > I think that either I've stumbled onto a bug or I'm missing 
> > > > > > > >> > something
> > > > > > > >> > on how to manage my resources.  I have an activity with a 
> > > > > > > >> > Java based
> > > > > > > >> > view that contains 30 or so small images (~2k each .png) 
> > > > > > > >> > that are
> > > > > > > >> > loaded into an array when the view is created.  In "normal" 
> > > > > > > >> > operation,
> > > > > > > >> > everything runs fine.  When I flip the orientation between 
> > > > > > > >> > landscape
> > > > > > > >> > and portrait 3-4 times, I get the following:
>
> > > > > > > >> > E/AndroidRuntime(  472): java.lang.OutOfMemoryError: bitmap 
> > > > > > > >> > size
> > > > > > > >> > exceeds VM budget
> > > > > > > >> > E/AndroidRuntime(  472):        at
> > > > > > > >> > android.graphics.BitmapFactory.nativeDecodeAsset(Native 
> > > > > > > >> > Method)
> > > > > > > >> > E/AndroidRuntime(  472):        at
> > > > > > > >> > android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:290)
> > > > > > > >> > E/AndroidRuntime(  472):        at
> > > > > > > >> > android.graphics.drawable.Drawable.createFromStream(Drawable.java:635)
> > > > > > > >> > E/AndroidRuntime(  472):        at
> > > > > > > >> > android.content.res.Resources.loadDrawable(Resources.java:1440)
> > > > > > > >> > E/AndroidRuntime(  472):        at
> > > > > > > >> > android.content.res.Resources.getDrawable(Resources.java:498)
>
> > > > > > > >> > When the orientation gets changed, the activity seems to go 
> > > > > > > >> > through
> > > > > > > >> > the entire lifecycle (pause, stop, then create again).  A 
> > > > > > > >> > new instance
> > > > > > > >> > of the activity's view is created in the onCreate method and 
> > > > > > > >> > it seems
> > > > > > > >> > that the pause/stop steps in the lifecycle don't clean up 
> > > > > > > >> > the old
> > > > > > > >> > view.  I've tried explicitly setting the reference to the 
> > > > > > > >> > view to null
> > > > > > > >> > in onPause and doing a System.gc(), but that doesn't seem to 
> > > > > > > >> > help.
> > > > > > > >> > I've also tried setting the requested orientation to 
> > > > > > > >> > portrait in hopes
> > > > > > > >> > that the activity would then ignore orientation changes, but 
> > > > > > > >> > that
> > > > > > > >> > didn't work either.  GC messages come up after every 
> > > > > > > >> > orientation
> > > > > > > >> > change so one would think that the garbage collector was 
> > > > > > > >> > doing its
> > > > > > > >> > job.
>
> > > > > > > >> > I could just leave this be and assume people aren't going to 
> > > > > > > >> > be
> > > > > > > >> > randomly flipping their phone open and closed while they're 
> > > > > > > >> > using my
> > > > > > > >> > app, but that seems pretty sloppy.  I'd like to know what's 
> > > > > > > >> > going on
> > > > > > > >> > here and fix it.
>
> > > > > > > >> > Any ideas?
>
> > > > > > > >> > Thanks,
> > > > > > > >> > Steve
>
> > > > > > > >> --
> > > > > > > >> Romain Guywww.curious-creature.org
>
> > > > > > > --
> > > > > > > Romain Guywww.curious-creature.org
>
>
--~--~---------~--~----~------------~-------~--~----~
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
[EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to