使用大型数据库时,在我的情况下,大约有20个DataSource定义(每个DS有2-5个表,存储在同一个SQLiteDatabase中),很少出现问题
例如:
Context.getApplicationContext()
)尽管我知道,在不将应用程序的数据暴露给其他服务/应用程序(1,2)时,使用ContentProviders是不必要的,我认为它解决了上述大多数问题,并允许/推动实施有趣的功能,例如Broadcasts或使用Cursors来访问数据。
这只是对ContentProvider模式的误解,还是对可能的,不仅仅是提到的问题的真正复杂解决方案?
答案 0 :(得分:2)
ContentProvider实现可以编写很多样板代码,这就是我开发Mechanoid DB的原因。如果您计划实施sqlite支持的内容提供程序,它可能会让您的生活更轻松。
http://robotoworks.com/mechanoid-plugin/mechanoid-db/
http://robotoworks.com/2013/01/using-sqlite-in-android-with-mechanoid-db-part-1-tables/
答案 1 :(得分:1)
鉴于最近对 startmanagingcursor 的弃用,以及您可以从文档以及几本书(包括reto meyer的书)中读到的内容,contentprovider似乎是克服一堆内容的建议方法问题包括您列出的内容。
即使official documentation声明如果您不打算与其他应用程序共享数据,也不需要开发自己的提供程序,很明显基于加载程序方法得到广泛宣传,让您免于担心刚才提到的问题,更不用说每当数据发生变化时都会自动通知加载程序。
请注意,您可以隐藏内容提供商添加到外部世界
android:exported="false"
线程同步 在任何情况下都不应该担心,因为sqllite调用是线程安全的(根据我的记忆)。
我也同意编写内容提供程序包含很多样板代码,这就是为什么我写了一个脚本来为我编写:-)。如果您有兴趣,可以查看here,但还要考虑在谷歌上寻找“内容提供商生成器”将返回一些不错的替代品。