我需要根据不同的情况加载VectorDrawable资源到回收器视图中的图像视图。当前的实现每次都会实例化一个新的drawable,我敢肯定,这会导致列表中大量项目的性能损失。我想改变它,以便有效地重用可绘制的对象,以减少创建的对象的数量。我正在使用毕加索,我想把这项工作委托给它可能是一个好主意,但看起来毕加索无法加载VectorDrawable的。有什么方法可以管理它吗?
UPD。该资源使用ContextCompat.getDrawable加载,并使用setImageDrawable设置。在onViewRecycled中清除可绘制的ImageView
发布于 2018-03-28 20:50:00
我能想到的唯一解决方案是将动态可绘制图像的加载从UI线程转移到后台线程。要使加载更加流畅,您需要使用适配器中的AsyncTask异步加载图像。这将减轻UI线程的负担,并使用户体验更好。你不能使用毕加索,因此我推荐一个简单的AsyncTask。
我找到了一个很好的代码片段,看一下:
public View getView(int position, View convertView,
ViewGroup parent) {
ViewHolder holder;
...
holder.position = position;
new ThumbnailTask(position, holder)
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);
return convertView;
}
private static class ThumbnailTask extends AsyncTask {
private int mPosition;
private ViewHolder mHolder;
public ThumbnailTask(int position, ViewHolder holder) {
mPosition = position;
mHolder = holder;
}
@Override
protected Cursor doInBackground(Void... arg0) {
// Download bitmap here
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (mHolder.position == mPosition) {
mHolder.thumbnail.setImageBitmap(bitmap);
}
}
}
private static class ViewHolder {
public ImageView thumbnail;
public int position;
}有关更多信息,请查看this链接。
https://stackoverflow.com/questions/49533982
复制相似问题