在 RecyclerView Android 中显示图像时如何更好地管理内存?
How to better manager memory when showing images in RecyclerView Android?
我正在使用 CardView
和 RecyclerView
来显示卡片列表,这很重。在大多数卡片中,图像的高度为 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);
}
}
我正在使用 CardView
和 RecyclerView
来显示卡片列表,这很重。在大多数卡片中,图像的高度为 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);
}
}