I have an application Activity
that in onCreate
loads an XML file from a service using an AsyncTask
. The XML is parsed into an ArrayList
. When I switch to a different activity and then back to the main activity, I want to be able to recognize that that XML file was already loaded and use the populated ArrayList
.
What is the best way to persist that ArrayList
?
onSaveInstanceState
only seems to support primitives and I've been unable to set up a case where onRetainNonConfigurationInstance
actually gets called. So in onCreate
, the XML data is loaded from the server ever time I switch to that Activity
. I have made the models that are in the ArrayList
implement Parcelable
, so could use that in some way?
I don't see where your problem has anything to do with multiple activities. What happens if the user presses HOME (gasp!), for example? Your app will eventually be closed. Do you want to reload the data from the server? If the answer is "yes", then you don't need to "persist" anything, and
onSaveInstanceState()
may suffice (see below). If the answer is "no", then you need to rethink your approach to your data model, so you arrange to keep the data in a database, synchronizing with your Web service periodically, and probably dumping theArrayList
and replacing it with aCursor
.If the answer to my HOME question is "yes", then you can just hold onto the data in a data member of your activity, and, if it is modestly sized, also stash it in the
Bundle
inonSaveInstanceState()
. ABundle
can hold anArrayList
ofParcelable
. However, if the data set is large (say, 100KB or more), you probably don't want to go this route and should consider the "no" path I described above.Rotate the screen. There are other scenarios, but orientation changes are the easiest ones to trigger it.
However, it has nothing to do with your problem.