在需要傳遞Context參數的時候,如果是在Activity中,我們可以傳遞this(這里的this指的是Activity.this,是當前Activity的上下文)或者Activity.this。這個時候如果我們傳入getApplicationContext(),我們會發現這樣也是可以用的。可是大家有沒有想過傳入Activity.this和傳入getApplicationContext()的區別呢?首先Activity.this和getApplicationContext()返回的不是同一個對象,一個是當前Activity的實例,一個是項目的Application的實例,這兩者的生命周期是不同的,它們各自的使用場景不同,this.getApplicationContext()取的是這個應用程序的Context,它的生命周期伴隨應用程序的存在而存在;而Activity.this取的是當前Activity的Context,它的生命周期則只能存活于當前Activity,這兩者的生命周期是不同的。getApplicationContext() 生命周期是整個應用,當應用程序摧毀的時候,它才會摧毀;Activity.this的context是屬于當前Activity的,當前Activity摧毀的時候,它就摧毀。
我們就只看Activity和Application,可以看到前三個操作不在Application中出現,也就是Show a Dialog、Start an Activity和Layout Inflation。開發的過程中,我們主要記住一點,凡是跟UI相關的,都用Activity做為Context來處理。
還有就是,在使用context的時候,小心內存泄露,防止內存泄露,注意一下幾個方面:
不要讓生命周期長的對象引用activity context,即保證引用activity的對象要與activity本身生命周期是一樣的。
對于生命周期長的對象,可以使用application context。
避免非靜態的內部類,盡量使用靜態類,避免生命周期問題,注意內部類對外部對象引用導致的生命周期變化。
作者:zhangxuanchen
鏈接:http://www.lxweimin.com/p/4f97baa0e8f7
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。