如何在RecyclerView Android中显示图像时更好地管理内存?

时间:2015-09-08 10:15:29

标签: android picasso android-recyclerview

我正在使用CardViewRecyclerView来显示卡片列表,这些卡片非常重。在大多数卡片中,图片的宽度128dp高度为match_parent(因此几乎整个屏幕都是如此)。

我正在使用Picasso库加载此图像。

问题是,在一些滚动图像不再加载后,我认为这是由于没有留下图像的内存

  

后台粘性并发标记扫描GC释放45617(2MB)AllocSpace   对象,8(256KB)LOS对象,20%免费,7MB / 9MB,总共暂停1.971ms   116.640ms

     

暂停所有线程:13.892ms

如何制作RecyclerView转储文件,这些转储文件看不到,只加载新文件?

@Override
public void onBindViewHolder(EventViewHolder viewHolder, int i) {
    Event event = events.get(i);
    if (event.getThumbnail() != null) {
        Picasso.with(context).load(event.getThumbnail()).into(viewHolder.thumbnail);
    } else {
        viewHolder.thumbnail.setVisibility(View.GONE);
    }
...
}

<ImageView
    android:id="@+id/row_main_thumbnail"
    android:layout_width="match_parent"
    android:layout_height="128dp"
    android:layout_below="@+id/row_main_description"
    android:contentDescription="@string/event_picture"
    android:scaleType="centerCrop" />

编辑: 我认为问题不在于RecyclerView本身,而是else statement我的意思是setVisibility(View.GONE)在这里搞乱,这就是图像没有出现的原因。

1 个答案:

答案 0 :(得分:3)

@Override
public void onBindViewHolder(EventViewHolder viewHolder, int i) {
    Event event = events.get(i);
    if (event.getThumbnail() != null) {
        Picasso.with(context).load(event.getThumbnail()).into(viewHolder.thumbnail);
        viewHolder.thumbnail.setVisibility(View.VISIBLE);
    } else {
        viewHolder.thumbnail.setVisibility(View.GONE);
    }
}