絕對讓你理解Android中的Context

來源:互聯網
上載者:User

標籤:android   context   

這個問題是StackOverFlow上面一個熱門的問題What is Context in Android?
整理這篇文章的目的是Context確實是一個很抽象的東西,我們在項目中隨手都會用到它,可是很多人根本不理解它到底是幹什麼的,這篇文章還會添加Context in Andorid – INSIGHT的翻譯,絕對讓讀者理解Context的意義。

老規矩,作者提出的問題:
在Android中,Context到底是個什麼鬼東西,它到底是幹嘛使得,我讀了很多篇文檔,然而並不能清除的理解它的含義。

答案:
簡單來說,就像它的名字(上下文)一樣,他是項目當前的狀態的一個標識,他可以讓新建立出來,新加入進來的對象或組件知道當前項目的進度,處於一個什麼狀態,這樣我們就可以容易理解內容相關的意思了把,上文就是自己知道了之前項目已經處於一個什麼樣的狀態,下文就是告訴後來的對象或者組件當前項目處於一個什麼狀態。
你可以通過getApplication()、getContext()、getBaseContext()或者this(在當前的Activity中時)來擷取context上下文。
通常使用Context的地方:
建立一個新的對象時:

1.建立新的View、adapter、listener

TextView tv = new TextView(getContext());ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);

2.擷取資源檔:例如 LAYOUT_INFLATER_SERVICE, SharedPreferences:

context.getSystemService(LAYOUT_INFLATER_SERVICE)   getApplicationContext().getSharedPreferences(*name*, *mode*);

3.隱式訪問組件

getApplicationContext().getContentResolver().query(uri, ...);

如果還不明白不用擔心,現在我們開始翻譯Context in Andorid – INSIGHT

Context大概是Android項目中最為常用的一個元素了
每個文檔中都會有如下一句話:

“An android context is an interface to global information about an application environment”
意思是Android的context是一個溝通全域資訊和程式環境的一個介面

當我找一些介紹context的文章時,我發現少之又少,所以我將我看到的一些文章做一個整理。

這裡的介面不是java中介面interface的意思,這個介面就是串連的意思,串連兩個組件。

更準確說它是一個代表了各種環境資料的實體。

android.content.context使resources(資源檔)、資料庫、檔案系統、activity、系統服務等組件之間有了可以訪問的入口。

或者可以這樣說:Context持有程式的狀態、入口、許可權、檔案系統、等資訊,並且是Activity、Service、Application等組件的父類。

在現實世界中我們可以這樣描述Context:它就像一張門禁卡,通過這張門禁卡我們可以進入倉庫、可以進入客廳、可以進入廚房擷取我們想要的資源,這張門禁卡把幾個分離的房間串連到一起了。

一個擁有門禁卡(Context)的人(Activity)可以獲得各種系統的資源。

我們有3種方式可以獲得context:

  1. mContext = getApplicationContext();
    這種方式獲得的context是全域context,整個項目的生命中期中是唯一的且一直存在的,代表了所有activities的context

  2. mContext = getContext()
    這種方式獲得的context當activity銷毀時,context也會跟著銷毀了

  3. mContext = getBaseContext();
    說實話我也沒用過這種方式

何時使用getApplicationContext()或getContext()?

通過上面的分析我們知道了兩個context一個是跟隨activity的生命週期一個是跟隨application的生命週期的。

因此,當你想獲得一個長生命週期的context時,使用Application Context,例如當我們想要使用一個系統的服務時,這個系統服務的周期要比activity的生命週期長,如果我們使用getContext()的話,當activity銷毀時,系統服務也就不能正常進行了,這時候我們就得使用getApplicationContext()

絕對讓你理解Android中的Context

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.