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

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

目前,我有每个活动打开自己的DBManager对象(我创build的帮助器类来pipe理数据库)。 这是造成问题,但我想稍微更全球的访问解决scheme,所以我不必打开/closures/创build一个数据库。

我正在考虑几个选项,并希望听到每个以及其他build议的利弊。

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

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

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

build议?

在我看来,内容提供者是复杂的,如果你不与自己的活动分享,你不需要它。 因此,我build议你先使用一个单例类。 那么如果你有更多的时间或需要它,去内容提供商。

我已经成功使用了6个月的单身人士,没有太多困难。 (虽然我很小心,但真正使它成为一个单例,只有一个实例加载数据一次)

独生子

  • 优点:易于实施
  • 优点:因为我使用了一个普通的实例,所以我可以很容易地实现caching,从而使应用程序不必经常访问数据库
  • 缺点:无法与外部活动共享您的数据

内容提供商

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

这是造成问题,虽然

哪些是…什么?

我想要一个更全面的访问解决scheme,所以我不必打开/closures/创build数据库。

打开和closuresSQLite数据库很便宜。 尽可能避免静态和单态。 是什么让你认为你目前的解决scheme是坏的?

在Android上推荐的方法是使用ContentProvider 。 你的第一个内容提供者可能觉得比它的价值更麻烦,但是一旦你得到了这个模式,如果你没有尝试序列化blob,那么它应该不会太坏。