IMHO having a worker process is definitely worth the effort. It is a little daunting at first but once you get your head around it it's great fun to work on.
If you write your image loader worker process in a well structured way then you will be able to reuse it from project to project. One day mine might reach a state where I'm happy to release it but I would want to use it on a few more projects first to ensure it's generic enough. Plus if I just gave you the code you wouldn't learn anything and you'd miss out on the feeling of success when it finally works at 3 o'clock in the morning. I suggest you read this short thread where I commented on SoftReference: http://groups.google.com/group/android-developers/browse_thread/thread/614281daa12a3fd8 I would also suggest watching: http://www.youtube.com/watch?v=N6YdwzAvwOA http://www.youtube.com/watch?v=wDBM6wVEO70 Once you've done all that come up with a plan for handling a queue of requests (I used a PriorityQueue so I can fast track important images), caching images, returning the images to the caller...etc... Lots of fun to be had. Ed On Aug 28, 10:44 am, Dianne Hackborn <hack...@android.com> wrote: > This is an API demo for dealing with data that is slow to load: > > http://developer.android.com/resources/samples/ApiDemos/src/com/examp... > > You'll of course want to do this a little differently, filling in as much of > each item as you can when binding, and having a background thread loading > images to populate later when they are ready. (Instead of the stuff this > demo does with the scroll state changing.) > > > > > > On Fri, Aug 27, 2010 at 2:59 PM, ls02 <agal...@audible.com> wrote: > > I did some profiling and it turned out significant time is spent on > > loading images. Each listview item has a distinctive image. i have > > thousands of items in my listview so I cannot cache them. I tried to > > create an image on card folder cache of either PNG or JPEG image files > > of exactly the same dimension as the images I render in listview item > > ImageView. It helped but still not ideal. > > > I thought about saving uncompressed bitmap data to a an image cache > > file with hope it will be faster to load and render since the image > > won't need to be decompressed. But i didn't find any class or method > > to save and load uncompressed bitmaps. The only way I see to save the > > image to a disk file is Bitmap.compress which can be either JPEG or > > PNG (BTW, which one from these two is faster to load and render?). > > > I also thought about loading images in worker thread but this appears > > to be very complicated and I am not sure it will help and won't create > > other problems. I would have to create a queue if currently visible > > items and have to load images inside that thread. I worry that while I > > load a title image it is already scrolled out and becomes invisible. > > > On Aug 26, 11:26 pm, Dianne Hackborn <hack...@android.com> wrote: > > >http://developer.android.com/guide/developing/tools/traceview.html > > > > <http://developer.android.com/guide/developing/tools/traceview.html>This > > may > > > not be documented, but in newer versions you can use the "am" command to > > > start and stop profiling. Use "adb shell am" to get help for the > > command. > > > > On Thu, Aug 26, 2010 at 7:59 PM, ls02 <agal...@audible.com> wrote: > > > > How do I profile the code? I do recycle bitmaps since each list item > > > > displays its own bitmap image and without recycling I quickly run out > > > > of memory. > > > > > On Aug 26, 10:50 pm, Dianne Hackborn <hack...@android.com> wrote: > > > > > Run your code in a profiler. > > > > > > Make sure you aren't thrashing through temporary objects. If the GC > > is > > > > > running much while scrolling, optimize to reduce temp objects. > > > > > > On Thu, Aug 26, 2010 at 6:18 PM, ls02 <agal...@audible.com> wrote: > > > > > > I have list view with fairly complex list view items consisting of > > > > > > several image views, several text views, progress bars, etc. > > Depending > > > > > > on the state of the item some of these elements can be show and > > some > > > > > > are hidden. I understand that listview recycles views. Right now I > > am > > > > > > dealing with slow listview scrolling especially on lower powered > > > > > > devices. What's the best way to deal with this problem? > > > > > > > I already optimized each list item view as much as I could. Now I > > am > > > > > > facing with what's the best? Use one single view with many children > > > > > > for all items and hide and show various children depending on the > > item > > > > > > state. This way I do not inflate each item view as list is being > > > > > > scrolled but need to show and hide constantly various child views. > > > > > > > Another approach is to build item view dynamically each time view > > is > > > > > > requested in the adapter getView method. In this case I can only > > add > > > > > > at run time those elements that are truly needed for current item > > > > > > state but this requires inflating item view every time. > > > > > > > Finally the third approach is most extreme is to have one custom > > view > > > > > > and draw everything myself. This of cause requires a lot of work. > > > > > > > -- > > > > > > 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%2Bunsubs > > > > > > cr...@googlegroups.com> > > <android-developers%2bunsubscr...@googlegroups.com> > > > > <android-developers%2bunsubscr...@googlegroups.com> > > > > > > For more options, visit this group at > > > > > >http://groups.google.com/group/android-developers?hl=en > > > > > > -- > > > > > Dianne Hackborn > > > > > Android framework engineer > > > > > hack...@android.com > > > > > > Note: please don't send private questions to me, as I don't have time > > to > > > > > provide private support, and so won't reply to such e-mails. All > > such > > > > > questions should be posted on public forums, where I and others can > > see > > > > and > > > > > answer them.- Hide quoted text - > > > > > > - Show quoted text - > > > > > -- > > > > 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%2Bunsubs > > > > cr...@googlegroups.com> > > <android-developers%2bunsubscr...@googlegroups.com> > > > > For more options, visit this group at > > > >http://groups.google.com/group/android-developers?hl=en > > > > -- > > > Dianne Hackborn > > > Android framework engineer > > > hack...@android.com > > > > Note: please don't send private questions to me, as I don't have time to > > > provide private support, and so won't reply to such e-mails. All such > > > questions should be posted on public forums, where I and others can see > > and > > > answer them.- Hide quoted text - > > > > - Show quoted text - > > > -- > > 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%2Bunsubs > > cr...@googlegroups.com> > > For more options, visit this group at > >http://groups.google.com/group/android-developers?hl=en > > -- > Dianne Hackborn > Android framework engineer > hack...@android.com > > Note: please don't send private questions to me, as I don't have time to > provide private support, and so won't reply to such e-mails. 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