我在我的应用程序中有很多图片,我正在使用resize
并自定义许多列表的宽度和高度,我从服务器上获取所有这些列表的大尺寸图像。使用resize
是一个好主意吗?还是应该在需要时从服务器获取较小的图像,并从picasso调用中删除resize()
,这样会增加应用程序性能。我的主要问题是:在应用程序中经常使用resize
会降低性能,因为它需要调整应用程序中的每个图像。
我在我的应用程序中有很多图片,我正在使用resize
并自定义许多列表的宽度和高度,我从服务器上获取所有这些列表的大尺寸图像。使用resize
是一个好主意吗?还是应该在需要时从服务器获取较小的图像,并从picasso调用中删除resize()
,这样会增加应用程序性能。我的主要问题是:在应用程序中经常使用resize
会降低性能,因为它需要调整应用程序中的每个图像。
Picasso
只会将图像resize()
一次,因为它将被缓存(具体存储在LruCache中),除非缓存达到最大限制,否则缓存将删除一个图像以便存储新的图像。再次访问已删除的图像将触发另一个resize()
调用,但对于那些仍然在缓存中的图像,Picasso不需要执行resize()
。
如果您对服务器有完全控制权,则最好创建一个可自定义图像大小参数的API。例如,您只需要缩略图像,因此只需提供图像的宽度和高度即可,而不是下载不利于缩略图的大型图像,这样您还可以节省带宽。
Picasso的resize()函数有助于提高渲染性能,
但如果实际文件大小很大,则与实际大小下载所需的时间相比,下载时间会更长。
因此,最好使用来自服务器的已调整大小的图像,或者如果无法为每个分辨率提供已调整大小的图像,则同时使用两种方法。
这样可以将加载时间至少减少到可接受的时间。
尝试使用此方法指定图像的高度和宽度
Picasso.with(mContext)
.load(uri).resize(100, 100).centerCrop()
.placeholder(R.drawable.type_pic)
.error(R.drawable.type_pic)
.into(holder.icon);