From the point of view of keepabillty, I believe that the provider model is the cleanest way to abstract the data access code. And from the experience of working on a large application, in the end the application will grow to such an extent that some data must be presented through the model of the provider (for example, the introduction of services in the application). However, exposing a lot of different representations of your data can be a lot of work in the provider model.
If you went on a route, I would carefully think about how you display data via URLs, and, as a rule, with some complexity you are talking about, you can manage using subdirectories representing different representations of the data (similar to REST )
, DA . SQLiteOpenHelper DA ( ), DA.
Android . , MediaProvider.java, , , . , , , . DbSSLSessionCache.java