本地SQLite DB的Android内容提供商:为什么?

本地SQLite DB的Android内容提供商:为什么?,android,android-sqlite,android-contentprovider,Android,Android Sqlite,Android Contentprovider,我对Android开发还比较陌生,但我很难理解内容提供商,尤其是为单个应用程序、单个DB SQLite数据源创建一个应用程序有什么好处(如果有的话)。我可以看出,如果我想使用同步适配器,我需要一个内容提供商,但老实说,同步API是如此令人失望,以至于我认为使用REST滚动我自己的远程同步进程没有任何优势 我还看到,通过在我的SQLite DB上实现一个内容提供者,我得到了一个有保证的Android管理的singleton,但是我正在使用AndroidAnnotations,它可以为我做单例管理,

我对Android开发还比较陌生,但我很难理解内容提供商,尤其是为单个应用程序、单个DB SQLite数据源创建一个应用程序有什么好处(如果有的话)。我可以看出,如果我想使用同步适配器,我需要一个内容提供商,但老实说,同步API是如此令人失望,以至于我认为使用REST滚动我自己的远程同步进程没有任何优势

我还看到,通过在我的SQLite DB上实现一个内容提供者,我得到了一个有保证的Android管理的singleton,但是我正在使用AndroidAnnotations,它可以为我做单例管理,从我所读到的内容来看,似乎没有必要推荐使用单例DB助手,只要我正确管理我的打开连接

我错过什么了吗?对于单个DB应用程序来说,内容提供商API的级别似乎低得出奇,而且容易出错。专门“手动”管理URI映射,并引入这种奇怪的抽象层,似乎并没有增加多少价值


那么,本地SQLite数据库的内容提供商是否有价值呢?如果是这样的话,有没有什么框架可以为我生成URI映射,或者它是严格由您自己生成的?

首先,Sync API不仅仅是从您的服务器加载数据。它控制在整个系统中使用其他应用程序的同步批处理您的同步更新,确保运行前的连接,并优化整个系统的电池寿命(如中所述)

其次,使用内容提供程序可以让您非常轻松地利用该框架(也可以在支持库中获得),并允许您的UI随着内容提供程序中的数据更改而自动更新。这可以大大减少整个活动中所需的样板文件数量

如果内容提供者的样板文件本身是一个问题,那么您当然可以使用注释框架,例如自动为您生成绝大多数内容提供者

Android中还有一些功能只有在内容提供商的帮助下才能完成,包括将应用程序私有文件共享给其他应用程序(尽管扩展ContentProvider的helper类是您最需要的)


UI测试可以变得更加简单,您也可以使用提供的来模拟特定的数据集,而无需更改您的活动代码(当然,假设它只是从内容提供商加载数据)。

非常有用的答案,并且不知道需要CP的自定义搜索建议,谢谢!ProviGen看起来也很有用。我是否也希望使用内容提供商支持的适配器作为自动完成的数据源?我将处理一个自动完成功能,它至少有10k个可能的值,都在我的数据库中。@jkraybill-yes。与
CursorLoader
完美配合-您的
onLoadFinished(光标数据)
只需调用
mAdapter.swapCursor(数据)
即可刷新适配器的数据。