我是 Android 开发的新手(坦率地说,是整体开发),因此我一直在阅读 Commonsware Busy Coder 的指南。在阅读 SQLite 部分时,有几件事对我来说不是 %100 清楚的。以下是我认为正在发生的事情以及一些问题。如果我的思维过程有误,请纠正我。
作者建议,如果您要在应用程序中使用多个 Activity 的数据库,则不应使用每个 Activity 的 Context 引用来实例化SQLiteOpenHelper。相反,您应该使用getApplicationContext()
Activity 提供的。
通过这样做,他使用了getApplicationContext()
检索在应用程序进程开始后不久创建的 Context 的单例实例这一事实。这就是我的问题出现的地方。我认为如果我在实例化SQLiteOpenHelper时使用 Activity(this 关键字)提供的 Context ,每个 Activity 都会创建自己的SQLiteOpenHelper实例。在我看来,仅使用 Activity 的上下文并不会通知应用程序上下文已经创建了 SQLiteHelper 的实例,因此,它创建了一个新实例,而不是重新使用现有实例。我的想法正确吗?
我认为 Context(如果我错了,请纠正我)作为开发人员获取 Android 操作系统提供的信息和资源的“网关”(即通过 获取系统服务getSystemService()
)。但是使用 this(来自 Activity)或 using 这样做getApplicationContext()
有不同的含义。使用它,将获得一个 Context 的实例,它是您当前活动的“本地”,但使用getApplicationContext()
引用整个应用程序。如果这是正确的,是否意味着当我传递getApplicationContext()
对SQLiteOpenHelper构造函数的引用时,它会让我的整个应用程序知道我的SQLiteOpenHelper的实例已经创建。SQLiteOpenHelper如何让应用程序知道这一点?它是否使用一些静态方法,如 public/private static dbCreated(Context context){//让上下文知道有一个正在运行的实例}让应用程序知道?
如果这令人困惑,我很抱歉。
提前谢谢