我是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){//讓上下文知道有一個正在運行的實例}讓應用程序知道?
對不起,如果這是令人困惑。
由於時間提前
這是什麼問題? – Neolisk 2013-03-10 22:43:13
對不起,如果它是混亂。問題在第三段和第四段的末尾。 – Emmanuel 2013-03-11 00:01:20
它確實如此。我正在尋找一個可以在SO範圍內回答的問題。到目前爲止,你的觀點太過寬泛。 – Neolisk 2013-03-11 00:54:46