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

