Android:从应用程序中的多个活动访问单个数据库?

时间:2009-12-15 07:58:08

标签: java android singleton sqlite

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

目前,我让每个活动都打开自己的DBManager对象(我创建的帮助程序类来管理数据库)。这会导致问题,我想要一个更全面的访问解决方案,所以我不必继续打开/关闭/创建数据库。

我正在考虑几个选项,并希望听取每个选项的优缺点以及其他建议。

  1. 单身人士风格。有一个包装类,它返回对唯一数据库管理器的引用,因此任何需要它的活动都可以使用它。

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

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

  4. 建议?

4 个答案:

答案 0 :(得分:9)

在我看来,内容提供商很复杂,如果您不与自己的活动共享,则不需要它。因此,我建议你先使用单例类。然后,如果您有更多时间或需要它,请转到内容提供商。

我已成功使用单身人士连续6个月没有太大困难。 (我小心翼翼地让它成为单身,但只有一个实例加载数据一次)

的Singleton

  • 优势:易于实施
  • 优点:因为我使用了一个共同点 例如,我可以实现缓存 容易并因此使应用 不必像数据库那样做 常
  • 缺点:无法与外部活动共享您的数据

内容提供商

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

答案 1 :(得分:4)

  

这会导致问题

哪些是......什么?

  

我想多一点   全球访问解决方案,所以我没有   保持开/关/创建   数据库中。

打开和关闭SQLite数据库很便宜。尽可能避免静力学和单身。是什么让你认为你目前的解决方案是坏的?

答案 2 :(得分:0)

在Android上执行此操作的推荐方法是使用ContentProvider。你的第一个内容提供商可能觉得比它的价值更麻烦,但是一旦你得到了模式,它就不会太糟糕,只要你没有尝试序列化blob。

答案 3 :(得分:0)

这是2018年,与此同时Android已经发展。

今天推荐用于此用例的Android架构组件是Android Room。