毕加索不会从 url 加载更大的图像
Picasso does not load bigger images from url
我使用 Picasso 从 url 加载图像。到目前为止,图像加载对每个图像都有效,直到我尝试使用比其他图像 (1MB) 更大的 jpeg 图像进行加载。我尝试使用不应该被垃圾收集的 imageTarget 加载图像,因为它声明如下:
fun loadImage(view: ImageView, displayImageUrl: String?) {
val imageTarget: com.squareup.picasso.Target = object : com.squareup.picasso.Target {
override fun onBitmapLoaded(bitmap: Bitmap, loadedFrom: Picasso.LoadedFrom) {
view.setImageBitmap(bitmap)
}
override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?)
}
override fun onPrepareLoad(drawable: Drawable?) {
}
}
}
onBitmapLoaded
没有被执行,只有 onPrepareLoad
被执行。
下面的 Picasso 日志说 target 被垃圾收集了,但是如果执行 onPrepareLoad
这怎么可能。此消息是否指已从内存中清除的下载图像?图像是使用 Picasso 加载的,用于包含图像缩略图的列表视图并且工作正常,因为我可以在列表中看到图像,但是当我打开带有图像大视图的屏幕时,它不会加载它。
2022-03-25 10:03:41.462 8949-9021/mobile.debug D/Picasso: Dispatcher enqueued [R5]+2ms
2022-03-25 10:03:41.463 8949-9023/mobile.debug D/Picasso: Hunter executing [R5]+3ms
2022-03-25 10:03:42.386 8949-9023/mobile.debug D/Picasso: Hunter decoded [R5]+925ms
2022-03-25 10:03:42.388 8949-9021/mobile.debug D/Picasso: Dispatcher batched [R5]+927ms for completion
2022-03-25 10:03:42.505 8949-8963/mobile.debug I/ge.mobile.debu: NativeAlloc concurrent copying GC freed 80414(6068KB) AllocSpace objects, 75(1628KB) LOS objects, 49% free, 14MB/28MB, paused 823us total 133.822ms
2022-03-25 10:03:42.523 8949-8949/mobile.debug D/Picasso: Main canceled [R5]+1062ms target got garbage collected
2022-03-25 10:03:42.631 8949-9021/mobile.debug D/Picasso: Dispatcher delivered [R5]+1171ms
2022-03-25 10:03:42.631 8949-8949/mobile.debug D/Picasso: Main completed [R5]+1171ms from DISK
加载图片的调用很简单Picasso.get().load(displayImageUrl).into(imageTarget)
您应该使用调整大小来准确加载大小:
Picasso.with(this).load(imageUrl).resize(width, height).into(imageView);
Picasso 会加载大于 1MB 的图像。
Picasso.get().load(url)
.placeholder(R.drawable.gradient_placeholder_horizontal)
.into(image)
不要使用 Target。它有时不能正常工作。尤其是在回收者看来。
获取Bitmap使用。你可以用它来增加尺寸。
Bitmap bitmap = Picasso.get().load(url).get();
您可以使用此 resize & onlyScaleDown()。仅当 scaledown 大于 resize
中的给定值时才会调整大小
Picasso.get().load(url)
.placeholder(R.drawable.gradient_placeholder_horizontal)
.resize(476, 678)
.onlyScaleDown()
.centerCrop()
.into(image)
显然解决方案是使用 Picasso.get().load(displayImageUrl)
而不是 Target
。无需调整图像大小。 Target
为什么有时会失败的问题仍然没有答案。
我使用 Picasso 从 url 加载图像。到目前为止,图像加载对每个图像都有效,直到我尝试使用比其他图像 (1MB) 更大的 jpeg 图像进行加载。我尝试使用不应该被垃圾收集的 imageTarget 加载图像,因为它声明如下:
fun loadImage(view: ImageView, displayImageUrl: String?) {
val imageTarget: com.squareup.picasso.Target = object : com.squareup.picasso.Target {
override fun onBitmapLoaded(bitmap: Bitmap, loadedFrom: Picasso.LoadedFrom) {
view.setImageBitmap(bitmap)
}
override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?)
}
override fun onPrepareLoad(drawable: Drawable?) {
}
}
}
onBitmapLoaded
没有被执行,只有 onPrepareLoad
被执行。
下面的 Picasso 日志说 target 被垃圾收集了,但是如果执行 onPrepareLoad
这怎么可能。此消息是否指已从内存中清除的下载图像?图像是使用 Picasso 加载的,用于包含图像缩略图的列表视图并且工作正常,因为我可以在列表中看到图像,但是当我打开带有图像大视图的屏幕时,它不会加载它。
2022-03-25 10:03:41.462 8949-9021/mobile.debug D/Picasso: Dispatcher enqueued [R5]+2ms
2022-03-25 10:03:41.463 8949-9023/mobile.debug D/Picasso: Hunter executing [R5]+3ms
2022-03-25 10:03:42.386 8949-9023/mobile.debug D/Picasso: Hunter decoded [R5]+925ms
2022-03-25 10:03:42.388 8949-9021/mobile.debug D/Picasso: Dispatcher batched [R5]+927ms for completion
2022-03-25 10:03:42.505 8949-8963/mobile.debug I/ge.mobile.debu: NativeAlloc concurrent copying GC freed 80414(6068KB) AllocSpace objects, 75(1628KB) LOS objects, 49% free, 14MB/28MB, paused 823us total 133.822ms
2022-03-25 10:03:42.523 8949-8949/mobile.debug D/Picasso: Main canceled [R5]+1062ms target got garbage collected
2022-03-25 10:03:42.631 8949-9021/mobile.debug D/Picasso: Dispatcher delivered [R5]+1171ms
2022-03-25 10:03:42.631 8949-8949/mobile.debug D/Picasso: Main completed [R5]+1171ms from DISK
加载图片的调用很简单Picasso.get().load(displayImageUrl).into(imageTarget)
您应该使用调整大小来准确加载大小:
Picasso.with(this).load(imageUrl).resize(width, height).into(imageView);
Picasso 会加载大于 1MB 的图像。
Picasso.get().load(url)
.placeholder(R.drawable.gradient_placeholder_horizontal)
.into(image)
不要使用 Target。它有时不能正常工作。尤其是在回收者看来。
获取Bitmap使用。你可以用它来增加尺寸。
Bitmap bitmap = Picasso.get().load(url).get();
您可以使用此 resize & onlyScaleDown()。仅当 scaledown 大于 resize
中的给定值时才会调整大小 Picasso.get().load(url)
.placeholder(R.drawable.gradient_placeholder_horizontal)
.resize(476, 678)
.onlyScaleDown()
.centerCrop()
.into(image)
显然解决方案是使用 Picasso.get().load(displayImageUrl)
而不是 Target
。无需调整图像大小。 Target
为什么有时会失败的问题仍然没有答案。