在所有活动中共享同一数据库的最佳方式

时间:2011-11-05 10:19:27

标签: android database

我正在使用我需要在所有活动中访问的数据库。所以我创建了一个MyDBAdapter类,其中包含open,create,getData等所有方法......

要访问数据库,我会看到两种不同的方式:

一个。在每项活动中,我现在写下:MyDBAdapter db = new MyDBAdapter();

表示将在每个活动中创建一个新的DBAdapter。每个都会打开相同的数据库,必须关闭它。这也意味着可以通过多个活动打开相同的DB - 这样可以吗?或者我每次切换活动时都手动确保数据库已关闭?

湾在第一个活动中仅创建一个DBAdapter实例,并使用putExtra("Task", x);每次将其传递给下一个活动

然后DB只在第一个活动中打开和关闭一次。

哪一个是更好的方法?

非常感谢。

2 个答案:

答案 0 :(得分:2)

我更喜欢content provider在活动之间分享数据 尽管它主要用于在应用程序之间共享,但它可以在我们的单个应用程序中使用 如果我们使用内容提供程序,则不必担心关闭和锁定db。

Content providers实现了一个通用接口,用于查询提供程序并返回结果 - 以及添加,更改和删除数据。

这是客户端间接使用的接口,通常是ContentResolver个对象。您可以致电ContentResolver

获得getContentResolver()

选中此Simple Content Provider for db operations

答案 1 :(得分:1)

通常,您必须在完成数据库工作后立即关闭数据库(手动调用db.close())。这意味着如果您在多个活动中使用数据库,则必须在每次使用完毕后关闭它。也就是说,如果您在每个活动中拨打MyDBAdapter db = new MyDBAdapter();,或者您将对其进行静态引用,则由您决定。毕竟,如果某些代码块中有一些局部变量MyDBAdapter db,那么它将在某些时候被垃圾收集。

一般来说,您不希望在您的“活动”中执行数据库操作,因为这样它们将在UI线程上执行,阻止它,直到完成数据库操作。您可能希望使用AsyncTask进行数据库操作,这将为数据库操作创建一个单独的线程(并为您处理)。使用AsyncTasks时,这是一个很棒的tutorial