本地SQLite DB的Android Content Provider:为什么?

时间:2013-10-09 02:18:52

标签: android android-sqlite android-contentprovider

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

我也看到通过在我的SQLite数据库上实现内容提供程序,我获得了一个有保证的Android管理单例,但我使用AndroidAnnotations可以为我做单例管理,它似乎不是我的请注意,只要我正确管理打开的连接,就必须建议使用单一数据库帮助程序。

我错过了什么吗?对于单个数据库应用程序,Content Provider API看起来非常低级且容易出错。特别是“手动”管理URI映射并引入奇怪的抽象层似乎并没有增加太多价值。

内容提供商对本地SQLite DB的价值是什么?如果是这样,是否有一些框架可以为我生成我的URI映射,或者它是否严格自行编写?

1 个答案:

答案 0 :(得分:7)

首先,Sync API不仅仅是从服务器加载数据。它控制将同步更新与整个系统中的其他应用程序同步进行批处理,确保在运行之前实现连接,并优化整个系统的电池寿命(如running Sync Adapters periodicallytransferring data using sync adapters guide中所述)。 / p>

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

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

Android中还有一些功能可以在内容提供商的帮助下完成,包括custom search suggestions并将应用私有文件共享给其他应用(尽管帮助者{{ 3}}扩展ContentProvider的类是你需要的大部分内容。

UI测试可以变得更加容易,您可以使用提供的FileProvider来模拟特定的数据集,而无需更改您的活动代码(假设它只是从Content Provider加载数据) )。