【问题标题】:Is it possible to use ContentProvider and direct data access to Database in Android? (multiple application case)是否可以在 Android 中使用 ContentProvider 并直接访问数据库? (多个应用案例)
【发布时间】:2011-12-06 16:45:49
【问题描述】:

我有一个与此处类似的问题:Is it possible to use ContentProvider and direct data access to Database in Android? 但在我的情况下,我希望小部件应用程序是一个单独的应用程序。

所以我有一个使用标准 SQLiteOpenHelper 的 sqlite 数据库的第一个 Android 应用程序。这个助手是在我的应用程序 onCreate 中创建的单例。效果很好。

现在我想创建第二个应用程序——即一个小部件应用程序——也需要访问数据库。所以我想为此使用 ContentProvider 。

1) 这样做是否安全,或者我是否必须重构主应用程序以仅使用 ContentProvider(显然对我来说是一个阻碍!!)

2) 如果可以,我应该如何设计contentProvider?我想我将不得不重用我的单例 SQLiteOpenHelper 并最终在 contentProvider.onCreate 中创建它?

【问题讨论】:

  • 最好让两个元素使用相同的机制,即 contentprovider
  • @njzk2 :“首选”?所以你的意思是使用不同的机制是可能的? ;-) 确实将现有代码移至 contentprovider 将是一场噩梦。
  • 转移到内容提供商应该是非常不同的。毕竟,contentprovider 提供了您的 CRUD,就像您的数据库类可能提供的一样。但是,可以同时使用多种方法访问数据库,尽管我不明白为什么有人要这样做
  • 感谢 njzk2。您知道是否对性能有任何预期影响?我不关心小部件的数据库访问,但我的主应用程序的 INSERT/QUERY 性能非常重要,因为我有大表(已经通过事务优化)
  • 我不知道。 contentprovider 也提供了批处理机制

标签: android database concurrency android-contentprovider


【解决方案1】:

我也在尝试使用ContentProvider 和单例数据库对象。这似乎是一种有效的方法。

引用自:http://groups.google.com/group/android-developers/browse_thread/thread/20d8cbf7bf88f6d9

"只打开一次数据库。如果您不使用内容 提供者,实现一个负责打开 为您应用中的所有代码创建一次数据库。

“让我明确一点——内容没有任何问题 提供者从不关闭数据库。没有。这不是理由 避免使用内容提供者。事实上这是一个非常好的设计 方法,如果您不使用内容提供程序,而是直接使用 访问,我建议使用完全相同的方法 单例实现。

“如果你想拥有一个内容提供者并且也在其他地方做直接 访问数据库,然后在上面实现您的内容提供程序 拥有数据库的单例。

-- Dianne Hackborn Android 框架工程师 hack...@android.com

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多