My problem is that I display dynamic images (buddy's avatars) which size can
reach 128*128 but I down sample them into 64*64 so I can't use static
members for them.
A background thread (a single threaded ExecutorService) is responsible for
producing the 64*64 thumbnails, using BitmapFactory. When a thumbnail is
ready, a callback is called which occur in a call to notifyDataSetChange and
the list view is refreshed.

Even when all the thumbnails are decoded, I have still garbage collector
passes when I scroll the list view. I don't inflate views each time, I reuse
the convertView given by the getView callback in BaseAdapter (I have
overriden it).

The problem seems to be the imageView.setImageBitmap call. Even if the
thumbnail has been down sampled to 64*64 (and the image view is 64*64), the
documentation of BitmapFactory says the sampling may not be accurate so I
wonder if the image view makes extra work on the bitmaps.

2008/12/25 JP <joachim.pfeif...@gmail.com>

>
> Freepine might be right - I just toyed a little to see if there's any
> match between garbage collection and the scrolling (of a map). I am
> spreading garbage collection pretty wide however and it occurs at a
> time when it does not affect the user experience much, so it goes
> unnoticed.
> So you will see changes but scrolling might still not smooth out.
> There's a few additional things you can try; prefetch images and keep
> them allocated until users performs an action where user would not
> necessarily expect smooth transitions. Keep static images in class
> variables. Good luck.
>
> On Dec 24, 5:15 am, Guillaume Perrot <guillaume.p...@gmail.com> wrote:
> > I have very short freezes when scrolling a very long list views
> > containing down sampled images (I use BitmapFactory to produce
> > thumbnails in background that are placed in RAM cache but there is
> > still a problem).
> > When I look at the logs, each mini UI freeze corresponds to a garbage
> > collector log, the freed memory can reach 1 MB !
> > I don't call the gc myself but I guess this is called automatically in
> > the main thread, so it slows my UI.
> > Maybe calling it explicitly in a background thread (and I have one for
> > all network operations) may help, I'll try JP's approach ASAP.
> >
> > On Dec 24, 11:16 am, freepine <freep...@gmail.com> wrote:
> >
> > > Hi JP,
> >
> > > Yes, I agree to avoid time-consuming tasks in main thread:)What I am
> saying
> > > is that mostly GC will hold the whole process' execution while
> collecting
> > > memory, so it might not behave as you assumed even you put it in a
> separate
> > > thread.
> >
> > > -freepine
> >
> > > On Wed, Dec 24, 2008 at 1:37 PM, JP <joachim.pfeif...@gmail.com>
> wrote:
> >
> > > > My approach is to relief the main thread from any heavy lifting;
> > > > calling web servers, processing data and preparing data structures.
> > > > Calls to web servers should also not be made directly from the main
> > > > thread. All that helps a great deal to keep the app responsive.
> > > > Correction: Is essential to keep the app responsive. You need to
> > > > understand how to build mutex' though.
> > > > Calling garbage collection (in the background thread) is in a way
> just
> > > > another operation which occurs in background thread processing. I
> > > > stopped worrying about that a long time back.
> > > > JP
> >
> > > > On Dec 23, 5:58 pm, freepine <freep...@gmail.com> wrote:
> > > > > I was thinking that Dalvik GC was the stop-the-world GC. Does it
> matter
> > > > to
> > > > > call gc manually in a seperate thread or UI thread itself?
> >
> > > > > -freepine
> >
> > > > > On Wed, Dec 24, 2008 at 2:49 AM, JP <joachim.pfeif...@gmail.com>
> wrote:
> >
> > > > > > Depends where it's placed at. I calls to the GC "scattered" all
> over,
> > > > > > but with discretion. I made a concious design decision to avoid
> > > > > > allocating memory in the presentation layer which is handling
> user
> > > > > > interactions. I rely on a separate thread to handle all "back
> end"
> > > > > > activities such as capturing and processing data, and found it is
> safe
> > > > > > to call the garbage collector in this separate thread at pretty
> much
> > > > > > any time. Garbage collection in this archiecture is just one
> other
> > > > > > activity that will not interfere with the user experience, as
> long as
> > > > > > the overall burden on resources remains within device
> capabilities.
> >
> > > > > > On Dec 22, 12:41 pm, Dan Bornstein <danf...@android.com> wrote:
> > > > > > > On Sun, Dec 21, 2008 at 11:34 PM, Imran <imran...@gmail.com>
> wrote:
> > > > > > > >    hey  can  i use System.gc()  in my activity to request for
> > > > garbage
> > > > > > > > collection.
> > > > > > > >     will it work () ..   will the garbage collector be called
> ?
> >
> > > > > > > Yes it will. However, let me warn you that in my experience
> adding
> > > > > > > explicit calls to System.gc() almost always results in
> applications
> > > > > > > that perform worse than ones that just let the underlying VM gc
> as it
> > > > > > > sees fit.
> >
> > > > > > > -dan
> >
>


-- 
Guillaume Perrot
Software Engineer at Ubikod
BuddyMob developer

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to