2013-10-09 83 views
4

我对Android开发相当陌生,但是在包装内容提供者方面遇到困难,特别是为单应用单数据库SQLite数据源创建一个优点(如果有的话)有什么好处。我可以看到,如果我想使用同步适配器,我需要一个内容提供程序,但老实说,Sync API是如此的不堪重负,以至于我认为使用REST来滚动我自己的远程同步过程没有任何优势。本地SQLite数据库的Android内容提供者:为什么?

我也看到,通过在我的SQLite数据库上实现一个Content Provider,我得到了一个有保证的Android管理的单身人士,但我使用的AndroidAnnotations可以为我做单身管理,我已经读过,即使我正确地管理我的打开的连接,甚至还必须建议使用单身DB辅助器。

我错过了什么吗?内容提供者API似乎令人惊讶的是对于单个数据库应用程序而言是低级且容易出错的。特别是“手动”管理URI映射并引入奇怪的抽象层看起来不会增加太多价值。

那么内容提供商对本地SQLite数据库有价值吗?如果是这样,是否有一些框架可以为我生成我的URI映射,还是严格推出自己的映射?

回答

6

首先,Sync API不仅仅是从服务器加载数据。它控制批量同步更新与整个系统中的其他应用程序同步,在运行前确保连接,并优化整个系统的电池续航时间(如running Sync Adapters periodicallytransferring data using sync adapters guide中所述)。其次,使用内容提供程序可以非常轻松地利用Loaders框架(可在支持库中获得)和CursorLoader,它们允许您的UI在内容提供者中随着数据更改而自动更新。这可以大大减少整个活动所需的样板量。

如果内容提供者本身的样板是一个问题,那么您肯定可以使用Annotation框架(如ProviGen)为您自动生成绝大多数的内容提供者。

也有Android的一些功能,可以与内容提供商的帮助,包括custom search suggestions和共享应用的私人文件到其他应用程序(虽然扩展ContentProvider的助手FileProvider类是大多数你做'需要那个)。

用户界面测试可以变得更容易,您也可以使用提供的MockContentProvider来模拟特定的数据集,而无需更改您的活动代码(假设它仅从Content Provider中加载数据)。

+0

非常有用的答案,并没有意识到自定义搜索建议需要CP的,谢谢! ProviGen看起来也会有用。我是否正确地看到我也想使用Content Provider支持的适配器作为自动完成的数据源?我将处理一个自动完成功能,它至少有10k个可能的值,全部在我的数据库中。 – jkraybill

+0

@jkraybill - yep。 [CursorAdapter](http://developer.android.com/reference/android/widget/CursorAdapter.html)完全符合'CursorLoader' - 你的'onLoadFinished(游标数据)'可以调用'mAdapter.swapCursor(data) '刷新适配器的数据。 – ianhanniballake

相关问题