【问题标题】:Android Content Provider for local SQLite DB: why?本地 SQLite DB 的 Android 内容提供程序:为什么?
【发布时间】:2013-10-09 02:18:51
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android android-sqlite android-contentprovider


    【解决方案1】:

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

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

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

    Android 中还有一些功能只能在 Content Provider 的帮助下完成,包括 custom search suggestions 和将应用程序私有文件共享给其他应用程序(尽管帮助程序 FileProvider 类扩展 ContentProvider 是您最需要的)。

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

    【讨论】:

    • 非常有帮助的答案并且不知道需要 CP 的自定义搜索建议,谢谢! ProviGen 看起来也很有用。我是否正确地看到我还想使用内容提供者支持的适配器作为自动完成的数据源?我将处理一个自动完成功能,它至少有 10k 个可能的值,都在我的数据库中。
    • @jkraybill - 是的。 CursorAdapterCursorLoader 完美搭配 - 您的 onLoadFinished(Cursor data) 只需调用 mAdapter.swapCursor(data) 即可刷新适配器的数据。
    猜你喜欢
    • 2016-03-18
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多