问题
调用notifyDataSetChanged()方法,导致内存急速上涨OOM。
原因
单个Item的view界面,在构造函数里,做了一个addOnPreDrawListener监听,如下
view.getViewTreeObserver().addOnPreDrawListener(
new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
if (dataBean != null && !isInitView) {
view.getViewTreeObserver().removeOnPreDrawListener(this);
createMapPoint();
createTip();
isInitView = true;
}
return true;
}
});
当调用Adpter的notifyDataSetChanged()方法时,导致onPreDraw()一直回调,view.getViewTreeObserver().removeOnPreDrawListener(this)方法也是没有用的。
解决方式
在onPreDraw()方法中,追加一个参数isInitView,当响应一次后,设置为true,后边的不在响应即可。