Android。内容提供者或数据库?

Android。内容提供者或数据库?

问题描述:

我对这个问题有点困惑,如果最好使用ContentProviderDatabase。或者,如果我不想与其他应用程序共享任何数据,则不会有任何区别。Android。内容提供者或数据库?

如果我的理解正确,那么基于SQLite DB的内容提供者也有可能它们的内容仅对我的应用程序可访问。

你能给一些解释吗?

非常感谢你,

穆尔

+0

可能重复的[如何决定直接访问数据库和内容提供商吗?](http://stackoverflow.com/questions/7027647/how-to-decide -between-direct-database-access-and-content-provider) – 2014-01-08 15:04:15

+0

[何时使用Content Provider]的可能重复(http://stackoverflow.com/questions/4936712/when-to-use-a-content-提供者) – davidcesarino 2014-01-09 03:50:32

提供商是一个解决方案,特别是跨应用程序数据发布的确存在有价值的问题。例如,您需要使用内容提供商向快速搜索框提供搜索建议。

但是,对于应用程序内的内部使用,我不是粉丝。成本超过了恕我直言的好处(例如,灵活性降低,额外开销)。

如果你实现一个内容提供商,请记住,他们都可以访问其他应用程序默认。您需要在<provider>元素中包含android:exported="false"以使它们对您的应用程序保密。

+3

超过一年的时间,你的思想泡沫中仍然存在问题吗? – JohnnyLambada 2012-01-04 19:28:03

+5

@JohnnyLambada:是的。在这点上,我比我写这个答案时更加中立,但我仍然不会在应用程序内部使用内容提供者。 – CommonsWare 2012-01-04 19:38:34

+0

@CommonsWare:内容提供商很容易访问.....我应该喜欢在应用程序内部使用 – 2012-05-08 11:46:54

使用内容提供商会给你一个更加模块化的设计,使您的生活更容易,如果你在未来的某个时刻想伸手从其他数据应用。 如果您确定只有一个应用程序需要数据,那么您最好直接在数据库上操作。

有一个特定的SQLite限制,你应该知道的,那就是SQLite只是单用户。这实际上意味着你需要防止你的数据库被同时从多个线程访问。这在内容提供者中通常不是问题,因为他们几乎总是有单线程实现。

+0

所以如果我不这么认为,我的应用程序中的数据应该与其他应用程序共享,那么最好使用SQLite?!我也读过这个话题http:// stackoverflow。com/questions/1379200/android-content-provider-database-leak-issue这意味着,使用contentproviders有一些问题。嗯...... – Tima 2010-11-22 10:23:23

+0

那么,在这两种情况下都会使用SQLite,并且您提到的线程中出现的问题非常相似。 对于内容提供者,您可能被强制为一个用户场景,但如果您只是习惯于从一个专用工作线程执行数据库访问,则很容易避免出现该问题。 但是,最明显的好处(以及我认为唯一值得付出的努力)是数据库和使用它的应用程序存在于不同的进程中。 – Robert 2010-11-22 15:29:12

使用内容提供商的原因是here

总结:

  1. 轻易改变底层数据源(你可以改变你从SQLite的到蒙戈或一个JSON文件DB没有任何应用程序的变化)部分Android类的
  2. 杠杆功能(SyncAdapter ,Loaders,CursorAdapter) - 这些类需要内容提供商,如果您没有一个,则无法使用它们
  3. 允许许多应用程序安全地访问,使用和修改单个数据。 (这真的是使用它的主要原因)