2012-05-08 19 views
5

我是新到Android ...仍然混淆語境

最大一次我不得不面對的context類有時候讓我迷惑。 在某些地方,它使用context, 某處它被稱爲getApplicationContext(),getContext(),getBaseContext()

我試圖讓我從這個網站了解它, http://www.developer.android.com/,但它很難理解。

回答

2

在Android上,Context用於許多操作,但主要用於加載和訪問資源。這就是爲什麼所有的小部件都會在其構造函數中接收一個Context參數。在常規的Android應用程序中,通常有兩種上下文,活動和應用程序。它通常是開發人員傳遞給需要Context的類和方法的第一個類:

您可以通過調用getApplicationContext(),getContext(),getBaseContext()或this(在activity類中)來獲取上下文。

典型上下文的用途:

  1. 創建新對象:創建新的視圖,適配器,聽衆:

    TextView的電視=新的TextView(的getContext()); ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(),...);

  2. 訪問標準公共資源:像 LAYOUT_INFLATER_SERVICE,SharedPreferences服務:

    context.getSystemService(LAYOUT_INFLATER_SERVICE)
    getApplicationContext()getSharedPreferences(模式);

  3. 訪問組件可隱式:。對於內容提供商, 廣播,意圖

    getApplicationContext()getContentResolver()查詢(URI,...);

您在使用上下文時,因爲maintaning它可能會導致內存泄漏

總之,爲了避免上下文相關的內存泄漏要小心,記住以下幾點:

  1. 待辦事項不保留對上下文活動的長期引用(參考 對於活動應該具有與活動 本身相同的生命週期)
  2. 嘗試使用背景的應用,而不是一個上下文活動
  3. 在活動中避免非靜態內部類,如果你不控制 其生命週期,使用靜態內部類,使弱引用 到裏面的活動。這個問題的解決方法是使用一個 靜態內部類與WeakReference的外部類,如的ViewRoot並以其w內部類實現 例如
  4. 垃圾收集器不是針對內存保險泄漏