gpt4 book ai didi

java - 从 View android中删除所有监听器

转载 作者:行者123 更新时间:2023-11-29 02:37:29 29 4
gpt4 key购买 nike

为了避免内存泄漏,我想从 android View 中删除所有的监听器和观察器。对于 TextWatcher,我知道我必须将使用 addTextChangedListener() 添加的每个引用保存在数据结构中,稍后(在 onDestroy 中)使用 removeTextChangedListener() 将其删除。但是对于一个 View 的其他听众,有没有一种方法可以找到它们并将它们全部设置为 null。到目前为止,我一直在我的大部分 View 中使用它(编辑:所有已分配给任何监听器的 View ;此外,它在 onDestroy() 和/或 onDestroyView() 中调用案例):

 public static  void releaseView(View view){
if(view != null ){
view.removeCallbacks(null);
if(!(view instanceof AdapterView)) {
view.setOnClickListener(null);
view.setOnTouchListener(null);
view.setOnLongClickListener(null);
view.setOnDragListener(null);
view.setOnFocusChangeListener(null);
view.setOnKeyListener(null);

if (view instanceof TextView) {
((TextView) view).setOnEditorActionListener(null);
((TextView) view).setKeyListener(null);


if(view instanceof CheckBox)
((CheckBox) view).setOnCheckedChangeListener(null);
}
}
else {
if (view instanceof ListView) {
((ListView) view).setOnItemClickListener(null);
((ListView) view).setOnItemLongClickListener(null);
((ListView) view).setOnItemSelectedListener(null);
((ListView) view).setOnScrollListener(null);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) //if Marshamallow => API 23
((ListView) view).setOnScrollChangeListener(null);
((ListView) view).setAdapter(null);
//return;
}

if (view instanceof Spinner) {
((Spinner) view).setOnItemSelectedListener(null);
//return;
}

if (view instanceof GridView) {
((GridView) view).setOnItemSelectedListener(null);
((GridView) view).setAdapter(null);
}
}
}
}

但我仍然得到一些通过此方法调用的 View 泄露。有什么我想念的吗?如果我在这里犯了错误,有人可以纠正我吗。

最佳答案

在 Android 中,默认情况下几乎所有 View 中的监听器都是空的,直到您初始化任何监听器。

所以设置 null 绝对没有必要

为什么会认为存在内存泄漏。有错误日志吗?

关于java - 从 View android中删除所有监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46226666/

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