Android中Application和Activity的Context對象的區別

Parenthtml

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

區別

  1. 生命週期不一樣,Application的生命週期即App的生命週期,一般比Activity的生命週期長的多,因此對於生命週期長的對象,通常使用application做爲context,避免不恰當的持有Activity形成內存泄漏。
  2. Application 不能showDialog
  3. Application startActivity 時,必須new一個Task
  4. Application在layoutInflate 時,直接使用默認主題,可能與當前主題不同

對比圖

你們注意看到有一些NO上添加了一些數字,其實這些從能力上來講是YES,可是爲何說是NO呢?下面一個一個解釋:ide

數字1:啓動Activity在這些類中是能夠的,可是須要建立一個新的task。通常狀況不推薦。

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

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

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

參考資料

何時用Application的Context,何時用Activity的Context Android Application中的Context和Activity中的Context的異同post

相關文章
相關標籤/搜索