It sounds to me like you are aware of everything you need to know to construct a solution that works for you. Fire up your threads and get to it! To really do this right, though, you need an http fetcher, a disk cache for fetched images, and a memory cache for only the most recently fetched images. And you need to check each one of these in reverse order to get the best performance for a ListView with images that must scroll quickly.
Overall, this is not exactly an easy problem to solve. I just shipped a solution for a prominent app I work on, and it took weeks of work and several eyeballs to iron out all the details. Doug On Wednesday, August 29, 2012 12:25:31 PM UTC-7, itai wrote: > > I’m struggling to figure out a straight forward design for the > following scenario: > > A user clicks a button which results in sending an http request > asynchronously to fetch a list of image URL’s (e.g some json > collection response). > Upon completion, a ListView would need to be populated with the images > referenced by the URL’s (e.g each list view item would issue its own > async http requests to download and display the image). The image > being downloaded will always be the most recent for the proper > recycled image. > > I’m concerned about three situations: > > 1. Configuration change can happen at any stage which will replace the > Activity instance receiving the async results with a new instance, > hiding already displayed images – My understanding is that the > solution for this is to maintain a some list of all active async tasks > on the initiating instance and transfer them all together in > onRetainNonConfigurationInstance(), However; my concern here is from > the doc’s: “This function is called purely as an optimization, and you > must not rely on it being called”, Does this mean that a configuring > change can happen and function won’t be called ?@! > > 2. A different activity comes into the foreground, causing the > executing activity to be in "pause state" while still getting updates > from the in-progress async operations – Here I’m not sure if there is > any violation (e.g updating an Activity UI in pause state). > > 3. A different activity comes into the foreground, causing the > executing activity to be paused and subsequently killed (the entire > process is killed) due to memory pressure - In this case I would want > to: > > a. Know that this is the case before it happens. > > b. Save to persistent storage all the *new* images if and only If all > the downloads have completed, if not, I would like to save all > existing images that where present before the whole download process > kicked in (if present from a past download). > That way if the user navigates back to Activity and the process is > recreated, I can load the persisted information and have the user see > a snapshot of images either from a previous request or a new request > (no interleaving) > > Initially I was inclined to use AsyncTask’s (1 AsyncTask for getting > the Url’s and X others for the images) and use > onRetainNonConfigurationInstance, to correct instance binding in case > of a configuration change… )I have yet to figure out how to detect the > process recycling case from configuration change before hand as there > is no defined order between onSaveInstanceState / > onRetainNonConfigurationInstance and I don’t want to persist the > information at every configuration change). However, after watching > Virgil’s google i/o presentation “Building Rest Clients” it seems > there is a recommended approach, to perform all the network calls > through a service which is supposed to decrease the likelihood of the > process from being killed. However, after further investigating this > it seems like a major overkill with many pitfalls of its own as it > requires implementing a 2 way messaging protocol possible involving > queuing messages, with no obvious way on how to handle callbacks in a > way that address the concerns outlined above, so I prefer to avoid > this risk unless absolutely required. > > So to sum up, I would really appreciate a professionals feedback on > this, as I'm kind of new to android... so if you feel like sharing an > *explanation* on how to do this right, great!! > > If you feel this is work and you can provide a concise and *correct* > sample that address all the concerns above, I would be happy > compensate, pypal works :) > > -Itai > > e: itaitai2003 … the at sign … yahoo .. com > > p. s > > No need for actual communication/imaging or persistence logic, simple > mock will do, without Fragments – I don’t use them, I don’t need them > in my project. > -- 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

