【问题标题】:Samsung Galaxy S6/7/8 - RuntimeException / throwIfCannotDraw三星 Galaxy S6/7/8 - RuntimeException / throwIfCannotDraw
【发布时间】:2017-12-17 08:02:24
【问题描述】:

最近,随着 android 7.0.0 的出现和设备的出现,我的应用程序开始无缘无故地抛出异常。问题是我不知道可能是什么问题 - 我知道它只发生在带有 Nougat 的三星设备上以及它关于绘制一些 ImageViews 的问题。像 Admob 或 Universal-Image-Loader 这样的库可以这样做吗?

无论如何,这是完整的例外 - 希望 some1 可以帮助我......

java.lang.RuntimeException: 
  at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:260)
  at android.graphics.Canvas.drawBitmap(Canvas.java:1420)
  at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:545)
  at android.widget.ImageView.onDraw(ImageView.java:1286)
  at android.view.View.draw(View.java:18313)
  at android.view.View.updateDisplayListIfDirty(View.java:17291)
  at android.view.View.draw(View.java:18075)
  at android.view.ViewGroup.drawChild(ViewGroup.java:3966)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752)
  at android.view.View.updateDisplayListIfDirty(View.java:17286)
  at android.view.View.draw(View.java:18075)
  at android.view.ViewGroup.drawChild(ViewGroup.java:3966)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752)
  at android.view.View.draw(View.java:18316)
  at android.view.View.updateDisplayListIfDirty(View.java:17291)
  at android.view.View.draw(View.java:18075)
  at android.view.ViewGroup.drawChild(ViewGroup.java:3966)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752)
  at android.view.View.updateDisplayListIfDirty(View.java:17286)
  at android.view.View.draw(View.java:18075)
  at android.view.ViewGroup.drawChild(ViewGroup.java:3966)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752)
  at android.view.View.updateDisplayListIfDirty(View.java:17286)
  at android.view.View.draw(View.java:18075)
  at android.view.ViewGroup.drawChild(ViewGroup.java:3966)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752)
  at android.view.View.draw(View.java:18316)
  at com.android.internal.policy.DecorView.draw(DecorView.java:850)
  at android.view.View.updateDisplayListIfDirty(View.java:17291)
  at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:666)
  at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:672)
  at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:780)
  at android.view.ViewRootImpl.draw(ViewRootImpl.java:3103)
  at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2899)
  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2493)
  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1493)
  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7040)
  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:927)
  at android.view.Choreographer.doCallbacks(Choreographer.java:702)
  at android.view.Choreographer.doFrame(Choreographer.java:638)
  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:913)
  at android.os.Handler.handleCallback(Handler.java:751)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:154)
  at android.app.ActivityThread.main(ActivityThread.java:6688)
  at java.lang.reflect.Method.invoke(Native Method:0)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

【问题讨论】:

  • 你能解决这个问题吗?或者知道原因吗?
  • 还没有,我无法使用 Galaxy 设备...
  • 你找到解决办法了吗?
  • 这与三星无关,但我看到这种情况更常见,其他手机是 OS 8/9 的诺基亚和索尼设备

标签: android imageview


【解决方案1】:

能否请您检查一下位图在绘制之前是否被回收?

【讨论】:

  • 好吧,问题是它没有提供任何调试信息,它只是崩溃......我至少需要知道它在 7.0.0 及更高版本中会导致什么 - 有趣的事情它只发生在三星设备上。
  • @wexeteme 遇到同样的问题。仅在 Galaxy 设备和 crashlytics 上没有给我足够的信息来确定它是关于一个无法重新创建问题的图像。你解决了吗?你能发布你的解决方案吗:)
【解决方案2】:

在使用大位图作为 TextView 的背景时出现此错误。 简单地减小主 Drawable 文件夹中位图的大小为我解决了这个问题。 我想通过将不同分辨率的位图放在多个Drawable文件夹中可以更优雅地解决它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2015-10-27
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多