Picasso不会从url加载更大的图像



我使用Picasso从url加载图像。到目前为止,图像加载对每个图像都有效,直到我尝试使用比其他图像更大的jpeg图像(1MB(。我尝试使用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日志说目标是垃圾收集的,但如果执行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确实加载了大于1MB的图像。

Picasso.get().load(url)
.placeholder(R.drawable.gradient_placeholder_horizontal) 
.into(image)

不要使用Target。它有时不能正常工作。尤其是从回收商的角度来看。

若要获得位图,请使用。你可以用它来确定尺寸。

Bitmap bitmap = Picasso.get().load(url).get();

您可以使用此调整大小&仅ScaleDown((。只有当缩放比例大于调整中给定的值时,才会调整的大小

Picasso.get().load(url)
.placeholder(R.drawable.gradient_placeholder_horizontal)
.resize(476, 678)
.onlyScaleDown()
.centerCrop()
.into(image)

您应该使用resize来准确加载大小:

Picasso.with(this).load(imageUrl).resize(width, height).into(imageView);

显然,解决方案是使用Picasso.get().load(displayImageUrl)而不是Target。不需要调整图像大小。然而,Target为什么有时会失败的问题仍然没有答案。

相关内容

  • 没有找到相关文章

最新更新