毕加索不会从 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 为什么有时会失败的问题仍然没有答案。