This is certainly a thought provoking question.
An application is a nice abstraction to have. I hope they keep it.
I like the idea that from anywhere in my code irrespective of its place I can ask for an application object and I get the same single application object. then i can discover where the app is installed, where are the log files, how I can read configuration etc.
However the right way to use an application is to use it as a conduit to get access to various services including the discovery of single instance objects (not necessarily implemented using singletons).
Again this is theory.
Until now in Android the application object if fairly simple. Given that if one needs to use its context then one can call the
Context.getApplicationContext()
static method from anywhere in the code.
If you were to use the inheritance approach the application interface will get crowded with many many methods which could have been broken down into their own abstractions.
I wish Android has a unified factory/configuration service that would have completely eliminated the need for singletons. For example the framework I developed and regularly use for web work called
AspireWeb has this abstraction (much like spring) and I found it extremely useful. In that world any application instance will have the following methods
IApplication
{
IFactory getFactoryService();
ILog getLoggingService();
IConfig getConfigurationService()
}
Then each application be it desktop or web will implement its own idea of what these services are. Once you get hold of an application object it is guaranteed to have these services. Out of these the IFactory works much like Spring.
Anyways coming back to your question
Implmenting the DAOs as singletons will give you better scoping because you can use multiple singletons and not corrupt the application name space.
I will still say find a way to implement or borrow a "spring" like abstraction to eliminate singletons but still get the same affect.
No. I haven't done this on Android.
I am hoping I will get time in about 10 years to port the AspireWeb framework to Android.