在Activity Activity或Application Context之间决定实例化SQLiteOpenHelper

Emm*_*uel 5 android-context sqliteopenhelper

我是Android开发的新手(总体来说是坦率的开发),因此我一直在阅读Commonsware Busy Coder的指南.在阅读SQLite部分时,有一些事情对我来说并不是100%.以下是我认为正在发生的事情以及一些问题.如果我在思考过程中出错,请纠正我.

作者建议,如果要在应用程序中使用多于一个Activity的数据库,则不应使用每个Activity的Context引用来实例化SQLiteOpenHelper.相反,您应该使用getApplicationContext()Activity提供的.

通过这样做,他使用了这样一个事实,即getApplicationContext()在应用程序进程开始后立即检索创建的Context的单例实例.这是我的问题出现的地方.我想如果我在实例化SQLiteOpenHelper时使用Activity提供的Context(this关键字),每个Activity都会创建自己的SQLiteOpenHelper实例.在我看来,仅使用Activity的Context不会通知Application Context已经创建了一个SQLiteHelper实例,因此,它创建一个新实例而不是重用现有实例.我的想法是否正确?

我认为Context(并且如果我错了,请纠正我)作为开发人员获取Android OS提供的信息和资源的"门户"(即通过获取系统服务getSystemService()).但是使用这个(来自一个Activity)或使用它getApplicationContext()有不同的含义.使用它,将获得一个Context的实例,它对您当前的Activity是"本地的",但使用getApplicationContext()引用整个应用程序.如果这是正确的,这是否意味着当我将引用传递getApplicationContext()SQLiteOpenHelper的构造函数时,它将让我的整个应用程序知道我的SQLiteOpenHelper的实例已经创建.SQLiteOpenHelper如何让应用程序了解这一点?它是否使用一些静态方法,如public/private static dbCreated(Context context){//让上下文知道这个运行的实例}让应用程序知道吗?

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

提前谢谢

Emm*_*uel 5

我想现在我对Context的概念有了更好的理解.我想分享一个我发现澄清这个主题的链接.http://t.co/9R0bPWiKc5