在我们日常开发当中一不小心就会写上一丢丢内存泄露的代码。
例如下面这一段单例模式:
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;
}
}
以上的代码中当Activity 生命周期结束时,Singleton类里面却还存在Activity的引用 这样Activity占用的内存就一直不能回收,于是就内存泄露啦。
当然啦内存泄露的例子还是很多的这里就不一一列举。
想要避免Activity相关的内存泄露,记住以下几点:
- 不要让生命周期长的对象引用Activity.getContext,即保证引用Activity的对象要与Activity本身生命周期是一样的
- 对于生命周期长的对象,可以使用getApplicationContext()
- 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化。