gpt4 book ai didi

java - ArrayAdapter 中的内存泄漏

转载 作者:太空狗 更新时间:2023-10-29 15:19:14 26 4
gpt4 key购买 nike

为了加快速度,我将解释我的实现,然后解释问题 =):

我有一个对象:

Class myClass{
......attrs......
......getters and setters......

public void setOnMyClassChangeListener(MyClassChangeListener listener){
this.listener=listener;
}
}

还有一个 ListView 监视该类的对象,其中包含该方法 ArrayAdapter:

static class ViewHolder {
View view1,view2,view3.....;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

final ViewHolder holder;
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.templaterow, null, true);
holder = new ViewHolder();
holder.view1=.....;
holder.view2=.....;
holder.view3=.....;
rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.getTag();
}
MyClass object= items.get(position)
object.setOnMyClassChangeListener(MyClassChangeListener(){
public void onMyClassChangeListener(MyClass obj){
holder.view1.setXX(obj.getValue1());
holder.view2.setXX(obj.getValue2());
......
}
}
);
}

所以我认为我正在泄漏内存,因为监听器在退出 ListActity 后保持设置,然后持有者泄漏对吗?

有没有比在 onStop 中迭代 Adapter 移除监听器更好的方法?

谢谢

最佳答案

是的,有一个更好的方法:不要在引用了 View 的对象上设置这样的监听器。

相反,您只需修改模型 (MyClass),然后在 ArrayAdapter 上调用 adapter.notifyDatasetChanged()。然后 ListView 将重绘。

关于java - ArrayAdapter 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9641404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com