检查位图是否被回收无助于解决"RuntimeException: Canvas: trying to use a recycled bitmap"

Checking if bitmap is recycled doesn't help to solve "RuntimeException: Canvas: trying to use a recycled bitmap"

我从服务向我的 activity 发送位图(使用 LocalBroadcastManager 和额外的意图位图)

我在 activity 中将它们设置为 ImageView,如下所示:

if (!bitmap.isRecycled) {
    imageView.setImageBitmap(bitmap)
}

当我不再需要该服务时,我将其关闭并释放保留在该服务中的位图对象

但是当我关闭服务时,通常会出现以下错误:

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@fc4b896

所以bitmap.isRecycled条件在这里没有帮助

有什么安全的方法可以将Bitmap设置为ImageView吗?

你的异常告诉你位图已经被回收所以不需要应用程序检查

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@fc4b896

而是检查空值

同时检查文档,了解您出错的原因

https://developer.android.com/reference/android/graphics/Bitmap#isRecycled()

当您使用 imageView.setImageBitmap(bitmap) 时,您不应在 setImageBitmap 之后回收位图,因为您的 imageView 仍在引用和使用该位图。 activity/fragment/view销毁后可以回收