在我們?nèi)粘i_發(fā)當(dāng)中一不小心就會(huì)寫上一丟丟內(nèi)存泄露的代碼氯析。
例如下面這一段單例模式:
public Myactivity extends Activity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
Singleton. getInstance(getContext())
}
}
public Singleton{
private static Singleton INSTATIC = new Singleton();
public static Singleton getInstance(Context context) {
if (INSTATIC == null) {
INSTATIC = new Singleton(context);
}
return instance;
}
}
以上的代碼中當(dāng)Activity 生命周期結(jié)束時(shí)你辣,Singleton類里面卻還存在Activity的引用 這樣Activity占用的內(nèi)存就一直不能回收,于是就內(nèi)存泄露啦。
當(dāng)然啦內(nèi)存泄露的例子還是很多的這里就不一一列舉。
想要避免Activity相關(guān)的內(nèi)存泄露饥追,記住以下幾點(diǎn):
- 不要讓生命周期長(zhǎng)的對(duì)象引用Activity.getContext,即保證引用Activity的對(duì)象要與Activity本身生命周期是一樣的
- 對(duì)于生命周期長(zhǎng)的對(duì)象,可以使用getApplicationContext()
- 避免非靜態(tài)的內(nèi)部類本今,盡量使用靜態(tài)類挪凑,避免生命周期問題,注意內(nèi)部類對(duì)外部對(duì)象引用導(dǎo)致的生命周期變化铐达。