首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滚动时的ListView内存分配

滚动时的ListView内存分配
EN

Stack Overflow用户
提问于 2015-11-21 01:18:23
回答 1查看 265关注 0票数 0

我正在使用jazzylistview和一个视图持有方法。当我滚动列表视图时,我注意到分配的内存越来越多。它不是很多,但在我滚动的时候,内存增加了。我已经尝试从列表视图和字体中删除图像。我在android api 22上运行。下面是列表视图的视图持有者方法:

代码语言:javascript
复制
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView==null) {
        face = Typeface.createFromAsset(context.getAssets(), "font/Roboto-Regular.ttf");
        face1 = Typeface.createFromAsset(context.getAssets(), "font/Roboto-Thin.ttf");
        convertView = View.inflate(context, R.layout.rss_item, null);
        holder = new ViewHolder();
        holder.itemTitle = (TextView) convertView.findViewById(R.id.textView);
        holder.itemTitle1 = (TextView) convertView.findViewById(R.id.textView1);
        holder.image = (ImageView) convertView.findViewById(R.id.icon);
        holder.itemTitle.setTypeface(face);
        holder.itemTitle1.setTypeface(face1);
        convertView.setTag(holder);
    } else {
        holder= (ViewHolder) convertView.getTag();
    }

    EventItem item = itemList.get(position);
    holder.itemTitle.setText(item.getTitle());
    holder.itemTitle1.setText(item.getDate());
    if (item.getIcon() != 1) {
        holder.image.setImageResource(item.getIcon());
    }
    return convertView;
}

static class ViewHolder {
    TextView itemTitle;
    TextView itemTitle1;
    ImageView image;
}
EN

回答 1

Stack Overflow用户

发布于 2015-11-21 01:24:32

代码中的Typeface.createFromAsset部分可能会非常繁重。我建议在适配器的构造函数中读取这两种字体,并使用两个全局变量来设置自定义TypeFace。

除此之外,轻微的内存增加可能是正常的,特别是因为新位置的视图可能需要膨胀并创建新对象。Android可以决定给你的应用程序分配多少内存,当你达到一定的“限制”时,它会开始转储其中的一些内存。

您可能遇到的唯一真正的问题是,当内存不断被分配,但垃圾收集器无法开始执行其任务并释放内存时。基本上,如果你看到你的图表增长了,然后又回到了一定的水平,你就很好。

此外,如果分配的总内存仍然很高,您的应用程序中的其他地方可能会出现问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33832479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档