Software rendering doesn't support hardware bitmaps
chachako opened this issue · 7 comments
chachako commented
一个比较奇怪的 Bug,第一次 push "BlurScene"
时从这个 Scene 的 onViewCreated 中执行 activity.window.decorView.draw(canvas)
没有出现任何问题,但当我 pop 掉这个 "BlurScene"
再重新 push 后就崩溃了
qii commented
有详细点的崩溃栈吗
chachako commented
有详细点的崩溃栈吗
java.lang.IllegalArgumentException: Software rendering doesn't support hardware bitmaps
at android.graphics.BaseCanvas.onHwBitmapInSwMode(BaseCanvas.java:632)
at android.graphics.BaseCanvas.throwIfHwBitmapInSwMode(BaseCanvas.java:639)
at android.graphics.BaseCanvas.throwIfCannotDraw(BaseCanvas.java:73)
at android.graphics.BaseCanvas.drawBitmap(BaseCanvas.java:131)
at android.graphics.Canvas.drawBitmap(Canvas.java:1588)
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:548)
at android.widget.ImageView.onDraw(ImageView.java:1442)
at android.view.View.draw(View.java:21594)
at android.view.View.draw(View.java:21468)
at android.view.ViewGroup.drawChild(ViewGroup.java:4413)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4174)
at android.view.View.draw(View.java:21466)
at android.view.ViewGroup.drawChild(ViewGroup.java:4413)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4174)
at android.view.View.draw(View.java:21466)
at android.view.ViewGroup.drawChild(ViewGroup.java:4413)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4174)
at android.view.View.buildDrawingCacheImpl(View.java:20862)
at android.view.View.buildDrawingCache(View.java:20728)
at android.view.View.draw(View.java:21318)
at android.view.ViewGroup.drawChild(ViewGroup.java:4413)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4174)
at android.view.View.draw(View.java:21466)
at android.view.ViewGroup.drawChild(ViewGroup.java:4413)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4174)
at android.view.View.draw(View.java:21466)
at android.view.ViewGroup.drawChild(ViewGroup.java:4413)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4174)
at android.view.View.draw(View.java:21466)
at android.view.ViewGroup.drawChild(ViewGroup.java:4413)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4174)
at android.view.View.draw(View.java:21466)
at android.view.ViewGroup.drawChild(ViewGroup.java:4413)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4174)
at android.view.View.draw(View.java:21466)
at android.view.ViewGroup.drawChild(ViewGroup.java:4413)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4174)
at android.view.View.draw(View.java:21597)
at com.frostor.BlurViewHelper.prepareNative(BlurViewHelper.kt:162)
at com.frostor.BlurViewHelper.updateBlur(BlurViewHelper.kt:136)
at com.frostor.BlurViewHelper$enableBlur$$inlined$doOnPreDraw$1.run(View.kt:399)
at androidx.core.view.OneShotPreDrawListener.onPreDraw(OneShotPreDrawListener.java:71)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1088)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2983)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1930)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7988)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1154)
at android.view.Choreographer.doCallbacks(Choreographer.java:977)
at android.view.Choreographer.doFrame(Choreographer.java:893)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1139)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
qii commented
进入页面后,后续是不是从glide啥的加载了 hardware 的 Bitmap 到 ImageView 上,这种 Bitmap 没法绘制到手动创建的 Canvas 上吧
chachako commented
进入页面后,后续是不是从glide啥的加载了 hardware 的 Bitmap 到 ImageView 上,这种 Bitmap 没法绘制到手动创建的 Canvas 上吧
没有...就单单的截图一下activity到画布上
qii commented
at android.widget.ImageView.onDraw(ImageView.java:1442)
能查到这个 ImageView 的 Bitmap 哪里来的吗
chachako commented
进入页面后,后续是不是从glide啥的加载了 hardware 的 Bitmap 到 ImageView 上,这种 Bitmap 没法绘制到手动创建的 Canvas 上吧
感谢,排查完了,确实是 ImageView 的问题,但是是 ParentScene 的,我将上一个 Scene 中列表的所有从 Glide 加载的图片取消掉就不会发生这个错误了。
但是奇怪的是为什么第一次 draw Canvas 不存在问题而从第二次开始就会崩溃呢?
qii commented
这就不晓得了