android - 内存泄漏 listview baseadapter
问题描述
在下面的代码中,可能有任何内存泄漏问题吗?。是否存在活动风险?。此代码在列表视图中包含活动的隐式引用,因此它可能会在旋转或打开新活动时产生泄漏内存问题?
adapter = new BaseAdapter() {
@Override
public int getCount() {
return searchList == null ? 0 : searchList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = new TextView(getApplicationContext());
}
((TextView) convertView).setText(searchList.get(position));
return null;
}
};
myListView.setAdapter(adapter);
解决方案
我认为您在这里没有泄漏问题。但是不要对那个 TextView 使用 ApplicationContext,你应该使用视图将出现的上下文。
如果您想非常确定,则有两种解决方案。
使用 ArrayAdapter
如果您使用 ArrayAdapter,它将为您处理几乎所有这些。它是 google 制作的用于简单列表结构的内置类。然后你不需要使用应用程序上下文来创建你的视图(你不应该这样做,你应该使用当前活动作为上下文)。
https://developer.android.com/reference/android/widget/ArrayAdapter
在 onDestroy() 方法中将适配器设置为 null。
如果您在 OnDestroy 中将您的适配器设置为 null,它将被 GC,并且不会阻塞 Activity 的 GC。只需在您的班级中保留对您的适配器的私有引用。您也可以与第一名一起执行此操作,不会造成任何伤害。
我认为这些都不是真的必要,这样的代码是很常见的做法。
推荐阅读
- r - R For循环逐渐变慢
- ios - Flutter In App Purchase Handle 用户在 IOS 中取消
- ffmpeg - Ubuntu 18.04 上的未知编码器“libx265”
- python - 如何使用 apache nifi 将 csv 处理为 hdfs?
- python - 为什么在 Pytorch 中需要嵌入?
- openapi - 查询中的索引数组
- kubernetes - Kubernetes 上的 Zalenium 具有 20-30 个并行测试用例和多个动态机器
- javascript - Vue 从 v-for 循环输入文本中获取唯一值
- symfony - EasyAdmin 3 日期时间选择器时间格式
- ios - 尝试使用本地标识符获取资产时出错