1. 程式人生 > >Application中的Context和普通的Activity中的Context有什麼區別呢?

Application中的Context和普通的Activity中的Context有什麼區別呢?

1.在全域性物件中使用application context
2.和activity繫結過的service中。

能用activity context的地方都不用Application中的Context,因為後者容易造成記憶體洩漏,而且能夠支援的方法和資料有限。

Application的Context是一個全域性靜態變數,SDK的說明是隻有當你引用這個context的生命週期超過了當前activity的生命週期,而和整個應用的生命週期掛鉤時,才去使用這個application的context。

一種推薦的用法就是應用程式註冊廣播broadcast時,使用這個context。

引用application context並不會導致記憶體洩漏。引用activity的context才會導致記憶體洩漏,當你的引用物件的生命週期超過了當前activity的生命週期時,系統回收你的activity時發現還有一個context的強引用,而不去銷燬這個activity,導致記憶體洩漏,在開發過程中,需要非常重視這點。

Context.getApplicationContext或者Activity.getApplication方法獲取.
還有就是,在使用context的時候,小心記憶體洩露,防止記憶體洩露,注意一下幾個方面:
 1. 不要讓生命週期長的物件引用activity context,即保證引用activity的物件要與activity本身生命週期是一樣的
 2. 對於生命週期長的物件,可以使用application context
 3. 避免非靜態的內部類,儘量使用靜態類,避免生命週期問題,注意內部類對外部物件引用導致的生命週期變化