2013-03-10 85 views
5

我是Android開發的新手(總的來說坦率地說),因此我一直在閱讀Commonsware Busy Coder的指南。在閱讀SQLite部分時,有幾件事情對我來說不是百分之百清楚。以下是我相信正在發生的以及一些問題。如果我在思考過程中錯了,請糾正我。決定活動上下文或應用程序上下文實例化SQLiteOpenHelper

作者建議,如果您要在應用程序中使用多個活動的數據庫,則不應使用每個活動的上下文引用來實例化SQLiteOpenHelper的。相反,您應該使用Activity提供的getApplicationContext()

通過這樣做,他使用getApplicationContext()檢索應用程序進程開始後立即創建的單例實例。這是我的問題出現的地方。我認爲如果我在實例化SQLiteOpenHelper時使用Activity(this關鍵字)提供的上下文,則每個Activity將創建自己的實例SQLiteOpenHelper。在我看來,僅僅使用Activity的上下文不會通知應用程序上下文已經存在SQLiteHelper創建的實例,因此它會創建一個新實例,而不是重新使用現有實例。我的想法是否正確?

作爲開發人員獲取Android操作系統提供的信息和資源的「門戶」(即通過getSystemService()獲得系統服務),我想到了Context(並糾正了我的錯誤)。但是這樣做(使用Activity)或使用getApplicationContext()會產生不同的影響。使用這個,將得到一個Context的實例,它對當前Activity是「本地的」,但使用getApplicationContext()引用整個應用程序。如果這是正確的,是否意味着當我將參考getApplicationContext()傳遞給SQLiteOpenHelper的構造函數時,它會讓我的整個應用程序知道我的SQLiteOpenHelper已經創建了一個實例。 SQLiteOpenHelper如何讓應用程序知道這件事?它是否使用了一些靜態方法,如公共/私有靜態dbCreated(Context context){//讓上下文知道有一個正在運行的實例}讓應用程序知道?

對不起,如果這是令人困惑。

由於時間提前

+0

這是什麼問題? – Neolisk 2013-03-10 22:43:13

+0

對不起,如果它是混亂。問題在第三段和第四段的末尾。 – Emmanuel 2013-03-11 00:01:20

+0

它確實如此。我正在尋找一個可以在SO範圍內回答的問題。到目前爲止,你的觀點太過寬泛。 – Neolisk 2013-03-11 00:54:46

回答

5

我認爲現在我有一個更好的理解上下文的概念。我想分享一個我發現的鏈接來澄清這個話題。 http://t.co/9R0bPWiKc5

2

對於第二個問題,如果我理解正確,Context是某種Registry of Singletons。所以SQLiteOpenHelper剛創建並綁定到給定的上下文。所有使用此上下文獲取SQLiteOpenHelper將獲得該綁定實例。

+0

感謝您的信息。 +1。 – Emmanuel 2014-02-24 14:18:59

相關問題