java - Android:从应用程序中的多个 Activity 访问单个数据库?

标签 java android singleton sqlite

我有一个 todo 列表类型的应用程序,它将所有笔记数据存储在 sqlite3 数据库中。应用程序中的每个 Activity 都需要访问数据库以实时编辑数据的不同部分。

目前,我让每个 Activity 都打开自己的 DBManager 对象(我创建的用于管理数据库的助手类)。但这会导致问题,我想要一个稍微更全局的访问解决方案,这样我就不必继续打开/关闭/创建数据库。

我正在考虑多种选择,并想听听每种选择的优缺点以及其他建议。

  1. 单例风格。有一个包装类返回对唯一数据库管理器的引用,以便任何需要它的 Activity 都可以使用它。

  2. 静态管理器。让管理器类完全是静态成员,并让它在加载时打开数据库。任何需要它的人(每个人)都可以轻松访问。

  3. 1 和 2 之间的合并。我可以创建一个数据库管理器类来初始化数据库的成员单例实例,并且所有数据操作方法都是静态的。然后我什至不需要引用单例来访问数据库。我最喜欢这个解决方案,请指出缺点。

建议?

最佳答案

在我看来,Content Provider 很复杂,如果您不与不属于您自己的 Activity 共享,则不需要它。因此,我建议您首先使用单例类。然后,如果您有更多时间或需要它,请去找 Content Provider。

我已经成功地使用了 6 个月的单例,没有太大的困难。 (虽然我很小心地让它成为一个单例,只有一个实例加载一次数据)

单例

  • 优点:易于实现
  • 优点:因为我用了一个普通的 例如,我可以实现缓存 很容易,因此使申请 不必对数据库做 经常
  • 缺点:无法与外部 Activity 共享您的数据

内容提供者

  • 优点:您可以共享您的数据 与外部 Activity
  • 优点:您可以与 搜索 API
  • 缺点:复杂,需要 以不同的方式表示您的数据 方式
  • 缺点:又一个 Android API 花时间学习

关于java - Android:从应用程序中的多个 Activity 访问单个数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1905846/

相关文章:

java - 在 Eclipse 中找不到 Java Import?

java - 在java中实现接口(interface)和抽象类中都存在的方法

java - JLayeredPane + JScrollPane 的剪切问题

php - Android MySql 密码验证不起作用

java - SpreadsheetService 中的应用程序名称是什么

grails - 你如何处理无状态 grails 服务中的共享数据

java - 创建一个方法来检查不同的对象,如果 null 抛出异常

java - Firebase数据库重复数据

android - Binder : Caught a RuntimeException from the binder stub implementation after integrating firebase

.net - 为什么要密封单例类?