Crashing during load large bitmap
soura216 opened this issue · comments
java.lang.RuntimeException:
at android.graphics.RecordingCanvas.throwIfCannotDraw (RecordingCanvas.java:281)
at android.graphics.BaseRecordingCanvas.drawBitmap (BaseRecordingCanvas.java:91)
at android.graphics.drawable.BitmapDrawable.draw (BitmapDrawable.java:548)
at android.widget.ImageView.onDraw (ImageView.java:1434)
at com.ortiz.touchview.TouchImageView.onDraw (TouchImageView.kt: 284)
at android.view.View.draw (View.java:23191)
at android.view.View.updateDisplayListIfDirty (View.java:22066)
at android.view.View.draw (View.java:22921)
at android.view.ViewGroup.drawChild (ViewGroup.java:5230)
at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4987)
The issue was not fixed yet
Crashing Device : Samsung Galaxy M31
java.lang.RuntimeException:
at android.graphics.RecordingCanvas.throwIfCannotDraw (RecordingCanvas.java:281)
at android.graphics.BaseRecordingCanvas.drawBitmap (BaseRecordingCanvas.java:91)
at android.graphics.drawable.BitmapDrawable.draw (BitmapDrawable.java:548)
at android.widget.ImageView.onDraw (ImageView.java:1434)
at com.ortiz.touchview.TouchImageView.onDraw (TouchImageView.kt:284)
at android.view.View.draw (View.java:23191)
at android.view.View.updateDisplayListIfDirty (View.java:22066)
at android.view.View.draw (View.java:22921)
at android.view.ViewGroup.drawChild (ViewGroup.java:5230)
at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4987)
at android.view.View.draw (View.java:23194)
at androidx.viewpager.widget.ViewPager.draw (ViewPager.java:2426)
at android.view.View.updateDisplayListIfDirty (View.java:22066)
at android.view.View.draw (View.java:22921)
at android.view.ViewGroup.drawChild (ViewGroup.java:5230)
at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4987)
at android.view.View.draw (View.java:23194)
at android.view.View.updateDisplayListIfDirty (View.java:22066)
at android.view.View.draw (View.java:22921)
at android.view.ViewGroup.drawChild (ViewGroup.java:5230)
at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4987)
at android.view.View.updateDisplayListIfDirty (View.java:22052)
at android.view.View.draw (View.java:22921)
at android.view.ViewGroup.drawChild (ViewGroup.java:5230)
at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4987)
at android.view.View.updateDisplayListIfDirty (View.java:22052)
at android.view.View.draw (View.java:22921)
at android.view.ViewGroup.drawChild (ViewGroup.java:5230)
at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4987)
at android.view.View.updateDisplayListIfDirty (View.java:22052)
at android.view.View.draw (View.java:22921)
at android.view.ViewGroup.drawChild (ViewGroup.java:5230)
at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4987)
at android.view.View.updateDisplayListIfDirty (View.java:22052)
at android.view.View.draw (View.java:22921)
at android.view.ViewGroup.drawChild (ViewGroup.java:5230)
at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4987)
at android.view.View.draw (View.java:23194)
at com.android.internal.policy.DecorView.draw (DecorView.java:1114)
at android.view.View.updateDisplayListIfDirty (View.java:22066)
at android.view.ThreadedRenderer.updateViewTreeDisplayList (ThreadedRenderer.java:588)
at android.view.ThreadedRenderer.updateRootDisplayList (ThreadedRenderer.java:594)
at android.view.ThreadedRenderer.draw (ThreadedRenderer.java:667)
at android.view.ViewRootImpl.draw (ViewRootImpl.java:4263)
at android.view.ViewRootImpl.performDraw (ViewRootImpl.java:4047)
at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:3320)
at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:2200)
at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:8960)
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:996)
at android.view.Choreographer.doCallbacks (Choreographer.java:794)
at android.view.Choreographer.doFrame (Choreographer.java:729)
at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:981)
at android.os.Handler.handleCallback (Handler.java:883)
at android.os.Handler.dispatchMessage (Handler.java:100)
at android.os.Looper.loop (Looper.java:237)
at android.app.ActivityThread.main (ActivityThread.java:7814)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1068)
To less info
Send a stacktrace it definitely to less, especially when it comes from android.widget.ImageView.onDraw (ImageView.java:1434)
Make it reproduce able, otherwise it's a local problem.
The issue was not fixed yet
Crashing Device : Samsung Galaxy M31
Please make a test, where the error is raised in CI, then it makes sense for me to jump in
I fixed nothing here concerning this issue. This is an open source project, even the history is public and everyone in warmly welcome to contribute
Please help someone to fix the issue
Same problem:
Fatal Exception: java.lang.RuntimeException: Canvas: trying to draw too large(192000000bytes) bitmap. at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:229) at android.view.RecordingCanvas.drawBitmap(RecordingCanvas.java:97) at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:529) at android.widget.ImageView.onDraw(ImageView.java:1367)
Affecting large number of users
We are also affected by this, full stacktrace:
Fatal Exception: java.lang.RuntimeException: Canvas: trying to draw too large(245401728bytes) bitmap.
at android.graphics.RecordingCanvas.throwIfCannotDraw(RecordingCanvas.java:281)
at android.graphics.BaseRecordingCanvas.drawBitmap(BaseRecordingCanvas.java:91)
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:548)
at android.widget.ImageView.onDraw(ImageView.java:1453)
at x.x.x.TouchImageView.onDraw(TouchImageView.java:289)
at android.view.View.draw(View.java:23901)
at android.view.View.updateDisplayListIfDirty(View.java:22776)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.draw(View.java:23904)
at androidx.viewpager.widget.ViewPager.draw(ViewPager.java:2426)
at android.view.View.updateDisplayListIfDirty(View.java:22776)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.draw(View.java:23904)
at com.android.internal.policy.DecorView.draw(DecorView.java:1282)
at android.view.View.updateDisplayListIfDirty(View.java:22776)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:579)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:585)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:662)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:4994)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4701)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3818)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2575)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9916)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1010)
at android.view.Choreographer.doCallbacks(Choreographer.java:809)
at android.view.Choreographer.doFrame(Choreographer.java:744)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:995)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8512)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
I'm having this issue with Viewpager2 and Glide. But I think this is not related with TouchImageView
library.
Try to follow up here: bumptech/glide#3775
For anyone who care, I have to downscaling the image before setImageDrawable
.
fun bind(imageUrl: String) {
val width = binding.root.context.resources.displayMetrics.widthPixels
requestManager.load(imageUrl)
.apply(RequestOptions().override(width))
.into(object : CustomTarget<Drawable?>() {
override fun onResourceReady(
resource: Drawable,
transition: Transition<in Drawable?>?
) {
binding.touchImageView.setImageDrawable(resource)
}
override fun onLoadCleared(@Nullable placeholder: Drawable?) = Unit
})
}