Java 是否再次下载毕加索图像以获得不同尺寸的ImageView?
我在我的应用程序中使用毕加索高效地加载图像,这是他的最佳工作。问题是,当前如果我使用同一url多次调用Java 是否再次下载毕加索图像以获得不同尺寸的ImageView?,java,android,picasso,Java,Android,Picasso,我在我的应用程序中使用毕加索高效地加载图像,这是他的最佳工作。问题是,当前如果我使用同一url多次调用Picasso.with(),但是每次使用具有不同维度的图像视图,图像再次被下载。在Glide中,我们有方法.diskCacheStrategy()和diskCacheStrategy.SOURCE来解决这个问题。毕加索有其他方法吗 在查询中,我们将得到Glid的解决方案,而不是毕加索的解决方案。如何在不重新下载的情况下重新使用不同维度的图像ImageView 这是我正在使用的代码 Picass
Picasso.with()
,但是每次使用具有不同维度的图像视图,图像再次被下载。在Glide
中,我们有方法.diskCacheStrategy()
和diskCacheStrategy.SOURCE
来解决这个问题。毕加索有其他方法吗
在查询中,我们将得到Glid的解决方案,而不是毕加索的解决方案。如何在不重新下载的情况下重新使用不同维度的图像ImageView
这是我正在使用的代码
Picasso.with(context)
.load(URI)
.placeholder(R.drawable.ic_profile_thumb)
.resize(180, 180).centerInside()
.into(viewHolder.imgThumbnail);
您可以使用同一供应商“SquareUp”提供的
OkHttp
。详细说明如何操作。毕加索没有将图像缓存到磁盘,毕加索只有一个内存缓存。磁盘缓存由网络库(OKhttp)完成。因此,写入磁盘缓存的映像永远不会重新调整大小 如果多次下载同一url图像,您可能需要检查您的网络库 如果您的项目使用okhttp库,毕加索将自动将其用作默认下载程序。如果您正在使用任何其他网络库,那么您必须编写自己的下载程序并使用
Picasso.Builder(context).downloader(customDownloader)
可能会让事情变得更清楚更新:链接很旧,顺便说一下,以下是最新版本中的更改: 正如@Sotti所说,
毕加索
拥有自动内存和磁盘缓存
,他们在引言部分提到了这一点:(最后一部分)**
在这个查询中,我们将得到Glid的解决方案,但不是Glid的解决方案 毕加索。如何在不重新下载图像的情况下重新使用图像 尺寸
ImageView
实际上,毕加索
只有一个内存缓存,但您可能需要使用OkHttp
来实现这一点
检查这个链接:上面写着:
如果你指的是磁盘缓存,那么毕加索就不会
目前支持这一点。这是设计上的,因为磁盘层
缓存由HTTP层
完成,对它没有区别
你也可以看看这个:
毕加索自动利用内存和磁盘缓存(由
HTTP客户端(HTTP客户端)可以加快位图加载速度。为了发展,你可以
启用指示图像的彩色标记的显示
来源
此外,请检查以下问题:
要使用OkHttp
将文件保存在自定义缓存目录中,请执行以下操作:
OkHttpClient okHttpClient = new OkHttpClient();
File customCacheDirectory = new File(Environment.getExternalStorageDirectory().getAbsoluteFile() + "/MyCache");
okHttpClient.setCache(new Cache(customCacheDirectory, Integer.MAX_VALUE));
OkHttpDownloader okHttpDownloader = new OkHttpDownloader(okHttpClient);
Picasso picasso = new Picasso.Builder(mainActivity).downloader(okHttpDownloader).build();
picasso.load(imageURL).into(viewHolder.image);
发件人:
如您所见,使用
默认情况下,毕加索不会调整图像大小。如果你打一个简单的电话,比如下一个
Picasso.with(context).load("https://goo.gl/v9EkbF").into(imageView);
…毕加索正在缓存全尺寸图像。从那一刻起,每次你调用同一个URL,毕加索都会重用这个全尺寸的图像,并让GPU调整视图的大小
使用resize()方法仅缓存调整大小的图像,如果使用不同的大小,毕加索将需要再次下载图像
不要使用resize()选项,您将获得更好的带宽使用率,但要注意内存使用情况
毕加索的默认设置
毕加索确实有自动内存和磁盘缓存。最近请求的任何映像都将位于内存缓存中。如果没有,毕加索将检查磁盘缓存。如果磁盘上没有,只有毕加索才会启动网络请求
所有请求的图像都存储在两个缓存中,直到必须删除它们才能释放空间
2.5.2中的默认值为:
- LRU内存缓存为可用应用程序RAM的15%
- 2%存储空间的磁盘缓存,最高50MB,但不低于5MB
- 毕加索将使用OkHttp作为Http客户端,如果它作为Gradle依赖项包括在内。否则毕加索将退回HttpUrlConnection
- MemoryPolicy.NO_缓存:不会从内存提供映像。这一个不能避免从磁盘提供图像。避免磁盘看不起网络策略
- MemoryPolicy.NO_STORE:图像不会存储在内存中。将此选项用于仅加载一次的图像
Picasso
.with(context)
.load(https://goo.gl/v9EkbF)
.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
.into(imageView);
网络策略
- NetworkPolicy.NO\u缓存:不会从磁盘缓存提供映像
- NetworkPolicy.OFFLINE:映像(如果可能)将仅从缓存(内存或磁盘)提供,而不会从网络提供
Picasso
.with(context)
.load(https://goo.gl/v9EkbF)
.networkPolicy(NetworkPolicy.NO_CACHE)
.into(imageView);
内存和缓存注意事项
- Glide默认使用RGB565,并将调整大小的图像缓存到 记忆
- 毕加索默认使用RGB888并将全尺寸图像缓存到 内存,让GPU在绘制时实时调整大小
- Glide为每个大小缓存单独的文件。如果您加载其他尺寸的 同样的图像,它将再次下载之前,调整大小,然后 缓存
- 毕加索总是从缓存中获取全尺寸图像,然后让GPU在视图中调整大小
Picasso
.with(context)
.load(https://goo.gl/v9EkbF)
.networkPolicy(NetworkPolicy.NO_CACHE)
.into(imageView);