ARK-Builders / ARK-Navigator

Android app for navigation through your data
MIT License
15 stars 15 forks source link

Gallery crash: trying to draw too large bitmap #139

Closed mdrlzy closed 2 years ago

mdrlzy commented 2 years ago

Redmi Note 9 Pro, Android 10

java.lang.RuntimeException: Canvas: trying to draw too large(257761280bytes) bitmap.
        at android.graphics.RecordingCanvas.throwIfCannotDraw(RecordingCanvas.java:280)
        at android.graphics.BaseRecordingCanvas.drawBitmap(BaseRecordingCanvas.java:88)
        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:276)
        at android.view.View.draw(View.java:21546)
        at android.view.View.updateDisplayListIfDirty(View.java:20415)
        at android.view.View.draw(View.java:21275)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4417)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4177)
        at android.view.View.draw(View.java:21549)
        at android.view.View.updateDisplayListIfDirty(View.java:20415)
        at android.view.View.draw(View.java:21275)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4417)
        at androidx.recyclerview.widget.RecyclerView.drawChild(RecyclerView.java:5204)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4177)
        at android.view.View.draw(View.java:21549)
        at androidx.recyclerview.widget.RecyclerView.draw(RecyclerView.java:4603)
        at android.view.View.updateDisplayListIfDirty(View.java:20415)
        at android.view.View.draw(View.java:21275)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4417)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4177)
        at android.view.View.updateDisplayListIfDirty(View.java:20406)
        at android.view.View.draw(View.java:21275)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4417)
        at androidx.coordinatorlayout.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1277)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4177)
        at android.view.View.updateDisplayListIfDirty(View.java:20406)
        at android.view.View.draw(View.java:21275)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4417)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4177)
        at android.view.View.updateDisplayListIfDirty(View.java:20406)
        at android.view.View.draw(View.java:21275)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4417)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4177)
        at android.view.View.updateDisplayListIfDirty(View.java:20406)
        at android.view.View.draw(View.java:21275)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4417)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4177)
        at android.view.View.updateDisplayListIfDirty(View.java:20406)
        at android.view.View.draw(View.java:21275)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4417)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4177)
        at android.view.View.updateDisplayListIfDirty(View.java:20406)
        at android.view.View.draw(View.java:21275)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4417)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4177)
        at android.view.View.updateDisplayListIfDirty(View.java:20406)
        at android.view.View.draw(View.java:21275)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4417)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4177)
        at android.view.View.updateDisplayListIfDirty(View.java:20406)
        at android.view.View.draw(View.java:21275)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4417)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4177)
        at android.view.View.draw(View.java:21549)
        at com.android.internal.policy.DecorView.draw(DecorView.java:842)
        at android.view.View.updateDisplayListIfDirty(View.java:20415)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:575)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:581)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:654)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:3715)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3510)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2847)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1800)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7762)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
        at android.view.Choreographer.doCallbacks(Choreographer.java:854)
        at android.view.Choreographer.doFrame(Choreographer.java:789)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7562)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
sisco0 commented 2 years ago

It should be studied if drawable-xxhdpi should be used instead of drawable for images with higher resolutions. A new loadLargeImageTest test case should be created at an images instrumented tests suite for replicating the issue and proposing a fix based on drawable-xxhdpi.

mdrlzy commented 2 years ago

Implemented in #192