android開發中的 Activity 與 Context 區別與聯系


Context 是 Application /Activity /Service的基類

 

Intent(Context , Class); 

 

Activity中的上下文Context是隨着活動的產生而產生,隨其消亡而消亡,但是整個應用程序的上下文Context這是伴隨着整個應用程序而存在的,無論活動的存活與否都影響不到這個上下文。

 

獲取上下文的 Context : this.getApplicationContext()

獲取Activity的Context

mContext = FavoritesSongActivity.this

 

Activity 的作用域

雖然Context神通廣大,但並不是隨便拿到一個Context實例就可以為所欲為,它的使用還是有一些規則限制的。由於Context的具體實例是由ContextImpl類去實現的,因此在絕大多數場景下,Activity、Service和Application這三種類型的Context都是可以通用的。不過有幾種場景比較特殊,比如啟動Activity,還有彈出Dialog。出於安全原因的考慮,Android是不允許Activity或Dialog憑空出現的,一個Activity的啟動必須要建立在另一個Activity的基礎之上,也就是以此形成的返回棧。而Dialog則必須在一個Activity上面彈出(除非是System Alert類型的Dialog),因此在這種場景下,我們只能使用Activity類型的Context,否則將會出錯。

 

 

通常我們想要獲取Context對象,主要有以下四種方法

1:View.getContext,返回當前View對象的Context對象,通常是當前正在展示的Activity對象。

2:Activity.getApplicationContext,獲取當前Activity所在的(應用)進程的Context對象,通常我們使用Context對象時,要優先考慮這個全局的進程Context。

3:ContextWrapper.getBaseContext():用來獲取一個ContextWrapper進行裝飾之前的Context,可以使用這個方法,這個方法在實際開發中使用並不多,也不建議使用。

4:Activity.this 返回當前的Activity實例,如果是UI控件需要使用Activity作為Context對象,但是默認的Toast實際上使用ApplicationContext也可以。

getApplication()和getApplicationContext()

上面說到獲取當前Application對象用getApplicationContext,不知道你有沒有聯想到getApplication(),這兩個方法有什么區別?相信這個問題會難倒不少開發者。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM