Android 中的Context

Activity是從Context類中派生而來的


Context.jpg

Context,中文直譯為“上下文”

  1. 它描述的是一個應用程序環(huán)境的信息,即上下文
  2. 該類是一個抽象(abstract class)類微姊,Android提供了該抽象類的具體實現(xiàn)類(后面我們會講到是ContextIml類)
  3. 通過它我們可以獲取應用程序的資源和類,也包括一些應用級別操作分预,例如:啟動一個Activity兢交,發(fā)送廣播,接收Intent信息等

應用程序創(chuàng)建Context實例的情況有如下幾種情況:

  1. 創(chuàng)建Application對象時笼痹,而且整個App共一個Application對象
  2. 創(chuàng)建Service對象時
  3. 創(chuàng)建Activity對象時
    因此應用程序App共有的Context數(shù)目公式為:
    總Context實例個數(shù)=Service個數(shù)+Activity個數(shù)+1(Application對應的Context實例)

Activity.this獲取的是這個Activity的Context配喳,this.getApplicationContext()獲取的是整個應用程序的Context,這兩者的生命周期是不同的凳干。

AlertDialog.Builder builder = new AlertDialog.Builder(this);
AlertDialog對象是依賴于一個View的晴裹,而View是和一個Activity對應的。

this:代表當前救赐,在Activity當中就是代表當前的Activity涧团,換句話說就是Activity.this在Activity當中可以縮寫為this.
getApplicationContext():生命周期是整個應用,應用摧毀经磅,它才摧毀泌绣。
getApplication():android開發(fā)中共享全局數(shù)據(jù)。


Context類型

Application - 是一個運行在你的應用進程中的單例预厌。在Activity或者Service中阿迈,它可以通過getApplication()函數(shù)獲得,或者人和繼承于context的對象中轧叽,通過getApplicationContext()方法獲得苗沧。不管你是通過何種方法在哪里獲得的刊棕,在一個進程內(nèi),你總是獲得到同一個實例待逞。

Activity/Service - 繼承于ContextWrapper鞠绰,它實現(xiàn)了與context同樣API,但是代理這些方法調(diào)用到內(nèi)部隱藏的Context實例飒焦,即我們所知道的基礎context蜈膨。任何時候當系統(tǒng)創(chuàng)建一個新的Activity或者Service實例的時候,它也創(chuàng)建一個新的ContextImpl實例來做所有的繁重的工作牺荠。每一個Activity和Service以及其對應的基礎context翁巍,對每個實例來說都是唯一的。

BroadcastReciver - 它本身不是context,也沒有context在它里面,但是每當一個新的廣播到達的時候评姨,框架都傳遞一個context對象到onReceive()旅薄。這個context是一個ReceiverRestrictedContext實例,它有兩個主要函數(shù)被禁掉:registerReceiver()和bindService()北专。這兩個函數(shù)在BroadcastReceiver.onReceive()不允許調(diào)用。每次Receiver處理一個廣播,傳遞進來的context都是一個新的實例恰响。

ContentProvider - 它本身也不是一個Context,但是它可以通過getContext()函數(shù)給你一個Context對象涌献。如果ContentProvider是在調(diào)用者的的本地(例如胚宦,在同一個應用進程),getContext()將返回的是Application單例燕垃。然而枢劝,如果調(diào)用這和ContentProvider在不同的進程的時候,它將返回一個新創(chuàng)建的實例代表這個Provider所運行的包卜壕。

保存引用
第一個我們需要解決問題是您旁,在一個對象或者類內(nèi)部保存一個context引用,而它生命周期卻超過其保存引用的對象的生命周期轴捎。例如鹤盒,創(chuàng)建一個自定義的單例,它需要一個context來加載資源或者獲取ContentProvider轮蜕,從而保存一個指向當前Activiy或者Service的引用在單例中昨悼。


View與Context(或Activity)的關系類似于明星與經(jīng)紀人的關系,所以創(chuàng)建View時跃洛,必須明確指定其Context(即經(jīng)紀人或大管家)率触,否則View就成不了明星。


參考

Android中Context詳解 ---- 你所不知道的Context]
原始地址

Android中Context用法詳解

Android中Context的總結及其用法

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汇竭,一起剝皮案震驚了整個濱河市葱蝗,隨后出現(xiàn)的幾起案子穴张,更是在濱河造成了極大的恐慌,老刑警劉巖两曼,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皂甘,死亡現(xiàn)場離奇詭異,居然都是意外死亡悼凑,警方通過查閱死者的電腦和手機偿枕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來户辫,“玉大人渐夸,你說我怎么就攤上這事∮婊叮” “怎么了墓塌?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奥额。 經(jīng)常有香客問我苫幢,道長,這世上最難降的妖魔是什么垫挨? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任韩肝,我火速辦了婚禮,結果婚禮上棒拂,老公的妹妹穿的比我還像新娘伞梯。我一直安慰自己,他們只是感情好帚屉,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漾峡,像睡著了一般攻旦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上生逸,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天牢屋,我揣著相機與錄音,去河邊找鬼槽袄。 笑死烙无,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的遍尺。 我是一名探鬼主播截酷,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乾戏!你這毒婦竟也來了迂苛?” 一聲冷哼從身側響起三热,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎三幻,沒想到半個月后就漾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡念搬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年抑堡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朗徊。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡夷野,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荣倾,到底是詐尸還是另有隱情悯搔,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布舌仍,位于F島的核電站妒貌,受9級特大地震影響,放射性物質發(fā)生泄漏铸豁。R本人自食惡果不足惜灌曙,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望节芥。 院中可真熱鬧在刺,春花似錦、人聲如沸头镊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽相艇。三九已至颖杏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坛芽,已是汗流浹背留储。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咙轩,地道東北人获讳。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像活喊,于是被迫代替她去往敵國和親丐膝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Activity mActivity =new Activity()作為Android開發(fā)者,不知道你有沒有思考過...
    朝花夕拾不起來閱讀 389評論 0 1
  • 什么是Context Context是一個抽象基類尤误,我們通過它訪問當前包的資源(getResources侠畔、getA...
    YoungerDev閱讀 491評論 0 0
  • 本文出自 Eddy Wiki ,轉載請注明出處:http://eddy.wiki/interview-androi...
    eddy_wiki閱讀 3,270評論 0 20
  • 我開始愛上雨天损晤,越大越好 讓我感到我正身處在冷靜而富有靈感的秘境中 每一滴雨水软棺,都是我,和我的思想 無數(shù)個我匯聚在...
    水花w閱讀 220評論 0 2
  • 現(xiàn)在多想回到無憂無慮小的時候 經(jīng)歷的多了看的多了 心真的累了
    5be251624cb2閱讀 84評論 0 1