我了解内容提供者旨在允许在应用程序之间公开共享数据。但是,我想知道是否有人考虑过让内容提供程序仅在您自己的应用程序中使用。这样做会有什么好处吗?有什么缺点吗?
过去,我刚刚实现了SQliteOpenHelper来访问数据库中的数据,但是我正在考虑创建一个Content Provider。我觉得请求数据的URI方法简明扼要。另一方面,仅将Content Provider用于我的应用程序是否会多余(因为在其中,我将拥有SQliteOpenHelper类)并且工作量超过所需?
我了解内容提供者旨在允许在应用程序之间公开共享数据。但是,我想知道是否有人考虑过让内容提供程序仅在您自己的应用程序中使用。这样做会有什么好处吗?有什么缺点吗?
过去,我刚刚实现了SQliteOpenHelper来访问数据库中的数据,但是我正在考虑创建一个Content Provider。我觉得请求数据的URI方法简明扼要。另一方面,仅将Content Provider用于我的应用程序是否会多余(因为在其中,我将拥有SQliteOpenHelper类)并且工作量超过所需?
Answers:
如果您不打算共享数据,请不要考虑内容提供商。它们功能强大,但很难编写,如果要在内部使用它们,实现它们将很愚蠢。
但是,我想知道是否有人考虑过让内容提供程序仅在您自己的应用程序中使用。
当然...例如,对于我编写的一个旧的TODO列表应用程序,我必须编写一个内容提供程序,以允许其他应用程序检索和访问任务状态。这是要求的一部分,但不仅有意义,而且使应用程序更好。
CursorLoader
来执行异步查询...您可以访问单例实例(ContentResolver
)来执行查询等。当然,您可以实现自己的Loader以用于SQLite数据库...当然您可以可以实现对整个应用程序中单个数据库实例的访问...当然,除非您希望共享,否则不需要ContentProvider
ContentProvider
。实际上,我们正在使用的最后一个应用最初是使用a制作的ContentProvider
,我们只是删除了它,因为它实际上比使用它更麻烦(我什至编写了一个库来简化基本ContentProvider
s的编写:github.com/casidiablo/persistence,但从未使用过它作为我自己的XD)。
ContentProvider
如果不需要,我们就不应该使用-“如果使用完全在您自己的应用程序中,并且您不需要,则不需要提供程序来使用数据库或其他类型的持久性存储上面列出的任何功能。您可以使用“保存应用程序数据”页面上所述的一种存储系统。”。否则,我们仅是工程。
我认为ContentProvider
即使您不打算公开使用a,绝对是个好主意。
优良作法是在数据上提供额外的抽象级别,以使内部更改更容易。如果您决定以后更改基础数据库结构怎么办?如果使用a ContentProvider
,则可以包含其中的所有结构更改,就好像您不使用其中一样,则必须更改受结构更改影响的所有代码区域。此外,很高兴能够重用相同的标准API来访问数据,而不是通过低级访问数据库来乱扔代码。
另外,将来总是有机会公开您的数据。如果您不ContentProvider
预先使用,以后将很难进行改装。
然后,Android的其他部分ContentProvider
是必需/推荐的,例如使用SyncAdapter
s时,以及是否要使用涉及数据访问的App Widget等。
总而言之,预先编写几乎ContentProvider
不需要任何开销(一旦您已经学会了API,这是一个好主意),因此这样做是有意义的,即使对于私有数据也是如此。
android:exported="false"
看一下MOTODEV Studio for Eclipse。这是扩展Eclipse的开发环境。他们有一个工具,您可以在其中自动为数据库生成内容提供程序。如果内容提供商可以更轻松地访问您的数据,并且对性能没有重大影响,请继续使用它。在大多数情况下都是如此。
简而言之,Content Providers
有助于有效地管理数据。我建议出于以下原因使用它们。
SyncAdapter
。例如,当数据库中的值与ContentProviders一起使用时,您可以自动刷新列表CursorLoader
。没有ContentProviders,您必须自己实现许多类似的功能。因此,即使您现在不需要这些功能中的任何一个,您将来也可能需要它们,这很有益,可以加倍努力并立即实施它们。
ContentProviders
以及我们应使用它们的三个不同原因。有时简单的解释是最好的。+1
在我看来,内容提供者具有许多优势,仅与其他应用程序共享数据就不用说了。如果您需要使用Sync-Adapter与服务器同步,请使用google cloud消息传递,当数据库中的基础数据使用Loader进行更改时自动更新UI,实施搜索,使用小部件...然后内容提供者就是您的最佳选择。
我希望您遵循该指南,因为有一天您可能需要实施附加到内容提供商的上述某些功能
顺便说一句,您可以使用内容提供商生成器在不到5分钟的时间内快速构建数据库和CP
如果不想与其他应用程序共享数据,请不要使用内容提供程序。使用简单的sqlitedatabase执行数据库操作。使用内容提供商存储机密数据时要小心,因为其他应用程序可能会访问您的机密信息