I’m trying to decide the best way to implement access to a collection of Objects throughout my android application. I need all activities to be able to access my list of Objects, which are retrieved from the server on startup and refreshed when needed. Lets say its a collection of Orders for the particular user, which will be displayed in a list and updated using the application.
I’ve read thorough explanations about reasons for using both, but I’m trying to decide whats best for my application.
-It won’t be used on a tablet
-It won’t interact with other Android apps
I’ve implemented a class called UserData which extends the Application class and is constructed when the application loads. It can be retrieved at any time by casting it to UserData type with getApplicationContext()
Is this the best way?
Is either method preferred for ease of storing the data locally on the device so it can be loaded immediately on application run, then refreshed in the background when the internet connection is available?
My immediate reaction is that you should use a content provider with exported=”false”. The data in the objects will certainly persist, you can update it whenever you want, and you have useful data to display even when the device doesn’t have connectivity. Even if your entire application is killed, the data’s still there.
I hesitate to “persist” data in memory, because the world of an Android app is fraught with peril :). Not only can the system kill me, but users are willing to kill tasks (in the mistaken belief that they’re somehow improving performance) or even shut off the phone. In short, I can’t count on permanence except when I write something to the file system.
Notice that you can register a cursor to watch changes in a content provider, and then adapt the cursor to a ListView. That way, any time the data changes you’re notified.
Beyond that, I’d do a search for “Application” and then for “Singleton” and see what the consensus is.