4

我对 Android 开发还很陌生,但是我无法理解内容提供程序,特别是为单应用程序、单数据库 SQLite 数据源创建一个内容提供程序的好处(如果有的话)。我可以看到,如果我想使用 Sync Adapter,我需要一个 Content Provider,但老实说,Sync API 实在是太平庸了,以至于我认为与使用 REST 滚动我自己的远程同步过程相比没有任何优势。

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

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

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

4

1 回答 1

7

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

其次,使用 Content Provider 可以让您非常轻松地利用Loaders框架(也可以在 Support Library 中获得)和CursorLoader,它允许您的 UI 在 Content Provider 中的数据更改时自动更新。这可以大大减少整个活动所需的样板数量。

如果 Content Provider 本身的样板是一个问题,那么您当然可以使用ProviGen等 Annotation 框架为您自动生成绝大多数 Content Provider。

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

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

于 2013-10-09T03:34:51.560 回答