5

我是 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){//让上下文知道有一个正在运行的实例}让应用程序知道?

如果这令人困惑,我很抱歉。

提前谢谢

4

2 回答 2

5

我想现在我对上下文的概念有了更好的理解。我想分享一个我发现的链接来阐明这个话题。http://t.co/9R0bPWiKc5

于 2013-06-30T16:01:03.233 回答
2

对于你的第二个问题,如果我理解正确的话, Context 是某种类型的Singletons 注册表。所以SQLiteOpenHelper只是被创建并绑定到给它的上下文。使用此上下文获取SQLiteOpenHelper的所有内容都将获得该绑定实例。

于 2014-02-24T13:55:52.760 回答