我正在使用我需要在所有活动中访问的数据库。所以我创建了一个MyDBAdapter类,其中包含open,create,getData等所有方法......
要访问数据库,我会看到两种不同的方式:
一个。在每项活动中,我现在写下:MyDBAdapter db = new MyDBAdapter();
表示将在每个活动中创建一个新的DBAdapter。每个都会打开相同的数据库,必须关闭它。这也意味着可以通过多个活动打开相同的DB - 这样可以吗?或者我每次切换活动时都手动确保数据库已关闭?
或
湾在第一个活动中仅创建一个DBAdapter实例,并使用putExtra("Task", x);
每次将其传递给下一个活动
然后DB只在第一个活动中打开和关闭一次。
哪一个是更好的方法?
非常感谢。
答案 0 :(得分:2)
我更喜欢content provider在活动之间分享数据 尽管它主要用于在应用程序之间共享,但它可以在我们的单个应用程序中使用 如果我们使用内容提供程序,则不必担心关闭和锁定db。
Content providers实现了一个通用接口,用于查询提供程序并返回结果 - 以及添加,更改和删除数据。
这是客户端间接使用的接口,通常是ContentResolver
个对象。您可以致电ContentResolver
getContentResolver()
答案 1 :(得分:1)
通常,您必须在完成数据库工作后立即关闭数据库(手动调用db.close()
)。这意味着如果您在多个活动中使用数据库,则必须在每次使用完毕后关闭它。也就是说,如果您在每个活动中拨打MyDBAdapter db = new MyDBAdapter();
,或者您将对其进行静态引用,则由您决定。毕竟,如果某些代码块中有一些局部变量MyDBAdapter db
,那么它将在某些时候被垃圾收集。
一般来说,您不希望在您的“活动”中执行数据库操作,因为这样它们将在UI线程上执行,阻止它,直到完成数据库操作。您可能希望使用AsyncTask进行数据库操作,这将为数据库操作创建一个单独的线程(并为您处理)。使用AsyncTasks时,这是一个很棒的tutorial。