内存泄漏列表视图基适配器



在下面的代码中,是否存在内存泄漏问题?。活动有风险吗?。这段代码在listview中有一个活动的隐式引用,因此它可能会在轮换或打开新活动时造成内存泄漏问题?

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);

我认为这里没有泄漏问题。但不要将ApplicationContext用于该TextView,您应该使用视图将出现的上下文。

两个解决方案,如果你想超级确定。

  1. 使用阵列适配器

    如果您使用ArrayAdapter,它将为您处理几乎所有这些。这是一个由谷歌制作的内置类,用于简单的列表结构。然后,您将不需要使用应用程序上下文来创建视图(这是不应该做的,您应该使用当前活动作为上下文(。

    https://developer.android.com/reference/android/widget/ArrayAdapter

    您可能想要使用此构造函数:https://developer.android.com/reference/android/widget/ArrayAdapter.html#ArrayAdapter(android.content.Context,%20int,%20T[](

    1. 在onDestroy((方法中将适配器设置为null。

      如果您在OnDestroy中将适配器设置为null,它将被GCed,而不会阻止活动的GC。只需在类中保留对适配器的私有引用。你也可以和一号一起做,不会伤害任何东西。

我认为这两种都不是真正必要的,像这样的代码是非常常见的做法。

最新更新