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

How to better manager memory when showing images in RecyclerView Android?

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

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

问题是一些滚动图片加载不出来后,我认为是图片没有内存了

Background sticky concurrent mark sweep GC freed 45617(2MB) AllocSpace objects, 8(256KB) LOS objects, 20% free, 7MB/9MB, paused 1.971ms total 116.640ms

Suspending all threads took: 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) 在这里搞砸了,这就是图像没有出现的原因。

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