我遇到内存不足错误。我检查了 DDMS,发现我分配更多内存的地方在我的适配器的 getView() 方法中。以这种方式创建对象对我来说是否更好:
view=new ImageView(myContext);
这是我的 getView() 方法的一个示例:
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView==null){
view=new ImageView(myContext);
view.setLayoutParams( new AbsListView.LayoutParams(columnWidth,columnWidth));
view.setBackgroundColor(Color.GRAY);
}else{
view=convertView;
convertView.setBackgroundColor(Color.GRAY);
}
return view;
}
我在 c'tor 中得到上下文:
public emptySquaresAdapter( Context myContext,) {
super();
this.myContext=myContext;
}
我读到了上下文泄漏,是这样吗?
编辑:
在这种情况下,我一次在屏幕上显示所有视图,因此从不使用转换后的视图(我不需要滚动以显示更多视图)。
此适配器在屏幕上显示 12 个方块。方法 getView 被调用 12 次,位置为 0(我猜是为了测量所有孩子的 vie),然后才继续定位 1,2,3... 为什么会发生这种情况?这会导致OOM问题吗?我从另一个适配器调用这个适配器,我猜是什么让一切变得复杂。
我还在 onDestroy 处取消绑定所有可绘制对象,并将 imageView.getDrawable().setCallback(null) 设置为所有 imageViews 它仍然不起作用