Android中Application和Activity的Context物件的區別

一隻有交流障礙的醜程式猿發表於2018-02-27

Parent

Application和Activity都繼承自Context,具體來說,Application繼承自ContextWraper,Activity繼承自ContextThemeWrapper(ContextThemeWrapper是ContextWraper的子類)。

區別

  1. 生命週期不同,Application的生命週期即App的生命週期,通常比Activity的生命週期長的多,所以對於生命週期長的物件,一般使用application作為context,避免不恰當的持有Activity造成記憶體洩漏。
  2. Application 不能showDialog
  3. Application startActivity 時,必須new一個Task
  4. Application在layoutInflate 時,直接使用預設主題,可能與當前主題不一樣

對比圖

Android中Application和Activity的Context物件的區別

大家注意看到有一些NO上新增了一些數字,其實這些從能力上來說是YES,但是為什麼說是NO呢?下面一個一個解釋:

 數字1:啟動Activity在這些類中是可以的,但是需要建立一個新的task。一般情況不推薦。

 數字2:在這些類中去layout inflate是合法的,但是會使用系統預設的主題樣式,如果你自定義了某些樣式可能不會被使用。

 數字3:在receiver為null時允許,在4.2或以上的版本中,用於獲取黏性廣播的當前值。(可以無視)

 注:ContentProvider、BroadcastReceiver之所以在上述表格中,是因為在其內部方法中都有一個context用於使用。
複製程式碼

參考資料

什麼時候用Application的Context,什麼時候用Activity的Context Android Application中的Context和Activity中的Context的異同

相關文章