Android Content Provider for local SQLite DB: why?



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

我还看到,通过在我的SQLite数据库上实现内容提供程序,我得到了一个有保证的Android管理的单例,但我正在使用可以为我进行单例管理的Android注释,从我所读到的内容来看,只要我正确管理我的打开连接,似乎甚至不一定建议使用单例数据库助手。

我错过了什么吗?内容提供程序 API 对于单个数据库应用程序来说似乎出奇地低级且容易出错。特别是"手动"管理 URI 映射并引入奇怪的抽象层似乎并没有增加太多价值。

那么,对于本地SQLite数据库,内容提供程序是否有价值?如果是这样,是否有一些框架可以为我生成我的 URI 映射,或者它是严格滚动自己的?

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

其次,使用内容提供程序可以非常轻松地利用加载器框架(在支持库中也可用(和 CursorLoader,它允许您的 UI 随着内容提供程序中的数据更改自动更新。这可以大大减少整个活动所需的样板数量。

如果内容提供程序

本身的样板是一个问题,那么您当然可以使用注释框架(如ProviGen(为您自动生成绝大多数内容提供程序。

Android中还有一些功能只能在内容提供商的帮助下完成,包括自定义搜索建议和将应用程序私有文件共享到其他应用程序(尽管扩展ContentProvider的帮助程序FileProvider类是您需要的大部分(。

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

最新更新