Android 何时使用内容提供商
我知道内容提供商允许在应用程序之间公开共享数据。然而,我想知道是否有人想过让内容提供商只在你自己的应用程序中使用。这样做有什么好处吗?有什么缺点吗Android 何时使用内容提供商,android,android-contentprovider,Android,Android Contentprovider,我知道内容提供商允许在应用程序之间公开共享数据。然而,我想知道是否有人想过让内容提供商只在你自己的应用程序中使用。这样做有什么好处吗?有什么缺点吗 在过去,我刚刚实现了SQliteOpenHelper来访问数据库中的数据,但我正在考虑创建一个内容提供者。我觉得请求数据的URI方法是清晰简洁的。另一方面,仅为我的应用程序使用内容提供者是否是多余的(因为在其中我将有一个SQliteOpenHelper类)和超出我需要的工作量?如果您不打算共享数据,请不要考虑内容提供者。它们功能强大,但很难编写,如果
在过去,我刚刚实现了SQliteOpenHelper来访问数据库中的数据,但我正在考虑创建一个内容提供者。我觉得请求数据的URI方法是清晰简洁的。另一方面,仅为我的应用程序使用内容提供者是否是多余的(因为在其中我将有一个SQliteOpenHelper类)和超出我需要的工作量?如果您不打算共享数据,请不要考虑内容提供者。它们功能强大,但很难编写,如果您打算在内部使用它们,那么实现它们将是愚蠢的 然而,我想知道是否有人想过让内容提供商只在你自己的应用程序中使用
当然。。。例如,对于我编写的一个旧TODO list应用程序,我必须编写一个内容提供程序,以允许其他应用程序检索和访问任务状态。这是需求的一部分,但更重要的是,它是有意义的,并且使应用程序变得更好。看看MOTODEV Studio for Eclipse。它是一个扩展Eclipse的开发环境。他们有一个工具,您可以在其中为数据库自动生成内容提供者。如果内容提供商使您的数据更容易访问,并且对性能没有显著影响,请继续使用它。在大多数情况下都是这样。我认为使用
内容提供者绝对是一个好主意,即使您不打算将其公开
最好的做法是对数据提供额外的抽象级别,以便更容易在内部进行更改。如果您决定以后更改基础数据库结构,该怎么办?如果使用ContentProvider
,则可以包含其中的所有结构更改,如果不使用,则必须更改受结构更改影响的所有代码区域。此外,能够重用相同的标准API来访问数据,而不是在低级别访问数据库时乱扔代码,这也很好
此外,您可能希望在将来公开您的数据。如果您事先不使用ContentProvider
,那么以后将很难对其进行改装
然后,Android的其他部分需要/推荐ContentProvider
,例如使用SyncAdapter
s时,以及如果您想要一个涉及数据访问的应用程序小部件
总之,预先编写ContentProvider
所涉及的开销非常小(一旦您了解了API,这无论如何都是一个好主意),因此这样做是有意义的,即使对于私有数据也是如此。我同意ContentProvider有点难掌握,但它们肯定很有帮助,即使你想在自己的应用程序内部使用它们。最好的一点是,您可以为合适的URI定制contentproviders
下面是一个场景,在这个场景中,您的数据库中可能有5个表,但在使用它们之前,您需要按特定顺序连接其中的一些表。并为每个连接创建一个内容URI。然后,您可以将每个URI用作一个表:)
我建议您继续使用Content Provider,您会惊奇地发现它的强大功能。如果您不希望与其他应用程序共享数据,请不要使用Content Provider。使用简单的sqlitedatabase执行数据库操作。使用内容提供商存储机密数据时要小心,因为您的机密信息可能会被其他应用程序访问在我看来,内容提供商有很多优势,更不用说与其他应用程序共享数据了。如果您需要使用同步适配器与服务器同步,请使用谷歌云消息,在数据库中的基础数据更改时使用加载程序自动更新UI,实现搜索,使用小部件。。。那么内容提供商就是为您服务的
我希望您遵循上的指南,因为有一天您可能需要实现附加到内容提供商的上述一些功能
顺便说一句,您可以使用文档中所述的在不到5分钟的时间内快速构建数据库和CP:
如果使用的是SQLite数据库,则不需要提供程序
完全在您自己的应用程序中
那么,为什么要费心开发这种开销呢?你想要更简单更快的开发,对吗?因此,一层抽象(SQLiteOpenHelper派生)就足够了
看
没有很好的理由不要创建实体。简言之,内容提供商
有助于有效地管理数据。我建议使用它们,原因如下
- 它充当UI和数据库之间的抽象层。您可以在ContentProviders中实现数据验证,以验证用户输入的数据。它还允许您修改数据库的结构,而无需触摸UI和其他部分
- 它们与其他android框架类(如
SyncAdapter
)配合得很好。例如,当数据库中的值使用ContentProviders和游标加载程序更改时,您可以自动刷新列表。如果没有ContentProviders,您必须自己实现许多类似的功能
- 我们可以安全地将我们的私人数据公开给其他应用程序。使用ContentProviders可以让我们轻松安全地与其他应用程序共享数据
因此,即使您现在不需要这些功能中的任何一项,您将来也可能需要这些功能,最好现在就多做一点并实现它们。使用内容提供商ca