zhanghai / MaterialFiles

Material Design file manager for Android
https://play.google.com/store/apps/details?id=me.zhanghai.android.files
GNU General Public License v3.0
5.87k stars 398 forks source link

Glide crashes when loading small images with extreme aspect ratio #160

Closed zhanghai closed 5 years ago

zhanghai commented 5 years ago
Fatal Exception: java.lang.RuntimeException: Canvas: trying to draw too large(429523200bytes) bitmap.
       at android.view.DisplayListCanvas.throwIfCannotDraw + 242(DisplayListCanvas.java:242)
       at android.view.RecordingCanvas.drawBitmap + 98(RecordingCanvas.java:98)
       at android.graphics.drawable.BitmapDrawable.draw + 545(BitmapDrawable.java:545)
       at android.widget.ImageView.onDraw + 1397(ImageView.java:1397)
       at android.view.View.draw + 20490(View.java:20490)
       at android.view.View.updateDisplayListIfDirty + 19357(View.java:19357)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.updateDisplayListIfDirty + 19348(View.java:19348)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.updateDisplayListIfDirty + 19348(View.java:19348)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.draw + 20493(View.java:20493)
       at android.view.View.updateDisplayListIfDirty + 19357(View.java:19357)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at androidx.recyclerview.widget.RecyclerView.drawChild(RecyclerView.java)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.draw + 20493(View.java:20493)
       at androidx.recyclerview.widget.RecyclerView.draw(RecyclerView.java)
       at com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView.draw(FastScrollRecyclerView.java)
       at android.view.View.updateDisplayListIfDirty + 19357(View.java:19357)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.draw + 20493(View.java:20493)
       at android.view.View.updateDisplayListIfDirty + 19357(View.java:19357)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.updateDisplayListIfDirty + 19348(View.java:19348)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at androidx.coordinatorlayout.widget.CoordinatorLayout.drawChild + 136(CoordinatorLayout.java:136)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.draw + 20493(View.java:20493)
       at android.view.View.updateDisplayListIfDirty + 19357(View.java:19357)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.updateDisplayListIfDirty + 19348(View.java:19348)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at androidx.drawerlayout.widget.DrawerLayout.drawChild + 98(DrawerLayout.java:98)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.draw + 20493(View.java:20493)
       at android.view.View.updateDisplayListIfDirty + 19357(View.java:19357)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.updateDisplayListIfDirty + 19348(View.java:19348)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.updateDisplayListIfDirty + 19348(View.java:19348)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.updateDisplayListIfDirty + 19348(View.java:19348)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.updateDisplayListIfDirty + 19348(View.java:19348)
       at android.view.View.draw + 20218(View.java:20218)
       at android.view.ViewGroup.drawChild + 4448(ViewGroup.java:4448)
       at android.view.ViewGroup.dispatchDraw + 4204(ViewGroup.java:4204)
       at android.view.View.draw + 20493(View.java:20493)
       at com.android.internal.policy.DecorView.draw + 914(DecorView.java:914)
       at android.view.View.updateDisplayListIfDirty + 19357(View.java:19357)
       at android.view.ThreadedRenderer.updateViewTreeDisplayList + 690(ThreadedRenderer.java:690)
       at android.view.ThreadedRenderer.updateRootDisplayList + 696(ThreadedRenderer.java:696)
       at android.view.ThreadedRenderer.draw + 805(ThreadedRenderer.java:805)
       at android.view.ViewRootImpl.draw + 3769(ViewRootImpl.java:3769)
       at android.view.ViewRootImpl.performDraw + 3539(ViewRootImpl.java:3539)
       at android.view.ViewRootImpl.performTraversals + 2880(ViewRootImpl.java:2880)
       at android.view.ViewRootImpl.doTraversal + 1746(ViewRootImpl.java:1746)
       at android.view.ViewRootImpl$TraversalRunnable.run + 7915(ViewRootImpl.java:7915)
       at android.view.Choreographer$CallbackRecord.run + 1066(Choreographer.java:1066)
       at android.view.Choreographer.doCallbacks + 877(Choreographer.java:877)
       at android.view.Choreographer.doFrame + 804(Choreographer.java:804)
       at android.view.Choreographer$FrameDisplayEventReceiver.run + 1052(Choreographer.java:1052)
       at android.os.Handler.handleCallback + 873(Handler.java:873)
       at android.os.Handler.dispatchMessage + 99(Handler.java:99)
       at android.os.Looper.loop + 216(Looper.java:216)
       at android.app.ActivityThread.main + 7266(ActivityThread.java:7266)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 575(RuntimeInit.java:575)
       at com.android.internal.os.ZygoteInit.main + 909(ZygoteInit.java:909)

Upstream: https://github.com/bumptech/glide/issues/3775

zhanghai commented 5 years ago

Fixed by adding and using AT_MOST_CENTER_OUTSIDE downsample strategy for loading thumbnail.