Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android Context詳解

Android Context詳解

編輯:Android開發教程

Android中context可以作很多操作,但是最主要的功能是加載和訪問資源。

在android中有兩種context,一種是application context,一種是activity context,通常我們在各種類和方法間傳遞的是activity context。

繼承關系:

區別聯系:

public class MyActivity extends Activity {     
    public void method() {     
       mContext = this;    // since Activity extends Context     
       mContext = getApplicationContext();     
       mContext = getBaseContext();     
    }     
 }

this 是Activity 的實例,擴展了Context,其生命周期是Activity 創建到銷毀

getApplicationContext() 返回應用的上下文,生命周期是整個應用,應用摧毀它才摧毀

Activity.this的context 返回當前activity的上下文,屬於activity ,activity 摧毀他就摧毀

getBaseContext() 返回由構造函數指定或setBaseContext()設置的上下文,SDK文檔很少,不推薦使用

搞清楚了生命周期就會在使用過程中犯錯誤,比如有一個全局的數據操作類用到了context,這個時候就要用到getApplicationContext 而不是用ACtivity,這就保證了數據庫的操作與activity無關(不會一直引用Activity的資源,防止內存洩漏)

應用場景:

比如一個activity的onCreate:

protected void onCreate(Bundle state) {             
     super.onCreate(state);             
     TextView label = new TextView(this); //傳遞context給view control             
     label.setText("Leaks are bad");             
     setContentView(label);     
}

把activity context傳遞給view,意味著view擁有一個指向activity的引用,進而引用activity占有的資源:view hierachy, resource等。

這樣如果context發生內存洩露的話,就會洩露很多內存。這裡洩露的意思是gc沒有辦法回收activity的內存。

Leaking an entire activity是很容易的一件事。當屏幕旋轉的時候,系統會銷毀當前的activity,保存狀態信息,再創建一個新的activity。

比如我們寫了一個應用程序,它需要加載一個很大的圖片,我們不希望每次旋轉屏幕的時候都銷毀這個圖片重新加載。

實現這個要求的簡單想法就是定義一個靜態的Drawable,這樣Activity 類創建銷毀它始終保存在內存中。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved