Android ListView 性能 - 奇怪的分配

标签 android performance listview expandablelistview

我已经实现了一个 ExapndableListView(这个问题对 ListView 来说很笼统)。

我已经添加了这个简化的代码示例(没有其他 View ,因为没有它们问题是一样的)。

问题是当我滚动时,有些分配我无法理解。 对于我滚动时显示的前 10-20 个新单元格(大约),分配了 3-4 MB +-,对于其余单元格,大约每 20 个单元格需要 1 MB。

据我所知,它不应该在加载列表后分配任何东西,只是重用适当的单元格。

public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
        View convertView, ViewGroup parent) {

    EventListItem object = (EventListItem) sections.get(groupPosition)
                                                .getItemAtIndex(childPosition);

    ViewHolder holder;
    if ( hView == null ) {
        hView = mInflater.inflate(R.layout.popularity_row, null);
        holder = new ViewHolder();
        holder.title = (TextView) hView.findViewById(R.id.label);
        convertView.setTag(holder);
    }
    else {
        holder = (ViewHolder) hView.getTag();
    }
    holder.id = object.getId();

    holder.title.setText(object.getTitle());

    return convertView;
}

static class ViewHolder {
    String      id;
}

可能是什么问题? 当我滚动时它会分配什么?

非常感谢。

最佳答案

首先,去掉 View hView = convertView; 行,然后在函数中使用 convertView。您在那里创建的链接没有用。

除此之外,您不必担心此处的分配。 ListView 为您做了很多优化,并且可能会大量使用/释放对象。

关于Android ListView 性能 - 奇怪的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11041116/

相关文章:

Android Listview 项目选择时的位置为 0

listview - 如何在 Flutter 的 ListView.builder 顶部添加填充?

java - 为什么列表大小返回0?

android - 如何将 Activity 添加到选项卡?

android - 抽屉导航不滑动

android: onDraw 被不断调用

performance - 要设置的 Oracle 兼容参数

javascript - JavaScript 中的无限 header ?

performance - 不要完全使用 cpu

android - 从数据库中获取存储的数据到 ListView 中。