何时使用内容提供商

Pza*_*nno 100 android android-contentprovider

我了解内容提供商允许在应用程序之间公开共享数据.但是,我想知道是否有人想让内容提供商只在你自己的应用程序中使用.这样做有什么好处吗?有什么缺点?

在过去,我刚刚实现了SQliteOpenHelper来访问我的数据库中的数据,但我正在考虑创建一个Content Provider.我觉得请求数据的URI方法简洁明了.另一方面,仅仅为我的应用程序使用内容提供程序是多余的(因为在其中我将有一个SQliteOpenHelper类)和更多的工作比我需要的?

Pau*_*ond 116

我认为,ContentProvider即使你不打算将它公之于众,也绝对是一个好主意.

最好为数据提供额外的抽象级别,以便更容易在内部进行更改.如果您决定稍后更改基础数据库结构,该怎么办?如果使用a ContentProvider,则可以包含其中的所有结构更改,就像您不使用它一样,您将被迫更改受结构更改影响的代码的所有区域.此外,能够重复使用相同的标准API来访问数据,而不是通过对数据库的低级访问来乱丢代码,这是很好的.

此外,您可能希望将来公开您的数据.如果您没有ContentProvider预先使用,那么在以后进行改装将会更加困难.

然后,还有Android的其他部分ContentProvider需要/推荐,例如在使用SyncAdapters时,如果你想要一个涉及数据访问的App Widget.

总而言之,编写预先版本所涉及的开销非常小ContentProvider(一旦你学会了API,这无论如何都是个好主意)所以这样做是有意义的,即使对于私有数据也是如此.

  • 在我看来,您可以并且应该以完全抽象的方式处理您的数据,而无需实现ContentProvider. (4认同)
  • 在学习Android之后,我立即开始以同样的方式思考这个原因.即使不是公开的,您也可以从增加的抽象和您的架构决策的单点实施中受益.我喜欢ContentProviders. (3认同)
  • 您可以使用此属性使内容提供程序仅对您自己的应用程序可用:`android:exported="false"` (2认同)
  • 当我正在为我的内部sqlite数据库实现内容提供者解决方案(没有与其他应用程序交互)时,我在https://developer.android.com/guide/topics/providers/content-provider-creating上看到了这条评论. html表示*如果使用完全在您自己的应用程序中,则不需要提供程序来使用SQLite数据库.* (2认同)

Cri*_*ian 55

如果您不打算共享数据,请不要考虑内容提供商.它们功能强大但很难编写,如果要在内部使用它们,实现它们将是愚蠢的.

但是,我想知道是否有人想让内容提供商只在你自己的应用程序中使用.

当然......例如,对于我写的旧TODO列表应用程序,我必须编写内容提供程序以允许其他应用程序检索和访问任务状态.这是要求的一部分,但不仅仅是它有意义,使应用程序更好.

  • 我同意你的理由,但我也认为重要的是(特别是初学者),一旦内容提供商实施,你将获得很多好处.例如,您可以使用`CursorLoader`来执行异步查询...您可以访问单例实例(`ContentResolver`)来执行查询等.当然,您可以实现自己的Loader用于SQLite数据库...当然,您可以在整个应用程序中实现对单个数据库实例的访问...当然,除非您希望共享,否则不需要ContentProvider (34认同)
  • 其他应用的数据.也就是说,实施您自己的内容提供商会带来许多*好处,因此您不应仅因为您的应用不共享其数据而将其放弃. (11认同)
  • 是的,你是完全正确的,但我仍然认为在大多数情况下这不值得.我至少完成了12个不同的Android应用程序(发布到Play商店)并且从不需要`ContentProvider`.实际上,我们最后一个应用程序最初是使用`ContentProvider`制作的,我们只是删除了它,因为它实际上比使用它更麻烦(我甚至编写了一个库,以便更容易实现基本的`ContentProvider`s:https://github.com/casidiablo/persistence但从未使用过我自己的XD). (8认同)

zzz*_*zzz 7

看看MOTODEV Studio for Eclipse.它是一个扩展Eclipse的开发环境.他们有一个工具,您可以自动为数据库生成内容提供程序.如果内容提供商更容易访问您的数据,并且它对性能没有显着影响,请继续使用它.在大多数情况下,情况就是这样.


Siv*_*ash 5

简而言之,Content Providers有助于有效地管理数据。我建议出于以下原因使用它们。

  • 它充当UI和数据库之间抽象层。您可以在ContentProviders中实现数据验证,以验证用户输入的数据。它还使您可以修改数据库的结构,而无需触碰UI和其他部分。
  • 它们与其他android框架类(如) 很好地配合使用SyncAdapter。例如,当数据库中的值与ContentProviders一起使用时,您可以自动刷新列表CursorLoader。没有ContentProviders,您必须自己实现很多类似的功能。
  • 我们可以安全地将我们的私人数据公开给其他应用程序。使用ContentProviders将使我们能够轻松安全地与其他应用共享我们的数据。

因此,即使您现在不需要这些功能中的任何一个,您将来也可能需要它们,这很有益,可以加倍努力并立即实施它们。