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(),這兩個方法有什么區別?相信這個問題會難倒不少開發者。