【问题标题】:What is root cause for android.graphics.Path.finalize() timed out after 10 secondsandroid.graphics.Path.finalize() 10 秒后超时的根本原因是什么
【发布时间】:2017-04-01 20:04:56
【问题描述】:

致命异常:java.util.concurrent.TimeoutException: android.graphics.Path.finalize() 10 秒后超时 在 android.graphics.Path.finalizer(Path.java) 在 android.graphics.Path.finalize(Path.java:748) 在 java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:202) 在 java.lang.Daemons$FinalizerDaemon.run(Daemons.java:185) 在 java.lang.Thread.run(Thread.java:818)

我在我的一个实时应用程序中遇到了这个错误,我尝试了所有可能的方法来解决这个问题,但仍然没有结果。如果有人能详细告诉我这个问题以及解决方法,那就太好了。提前致谢。

编辑:

我发现了更多日志:

   at android.view.GLES20Canvas.nDrawBitmap(GLES20Canvas.java)
   at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:614)
   at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:545)
   at android.widget.ImageView.onDraw(ImageView.java:1197)
   at com.flaviofaria.kenburnsview.KenBurnsView.onDraw(SourceFile:201)
   at android.view.View.draw(View.java:16536)
   at android.view.View.updateDisplayListIfDirty(View.java:15466)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.View.draw(View.java:16258)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3713)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506)
   at android.view.View.updateDisplayListIfDirty(View.java:15461)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3697)
   at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3676)
   at android.view.View.updateDisplayListIfDirty(View.java:15426)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3697)
   at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3676)
   at android.view.View.updateDisplayListIfDirty(View.java:15426)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.View.draw(View.java:16258)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3713)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506)
   at android.view.View.updateDisplayListIfDirty(View.java:15461)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.View.draw(View.java:16258)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3713)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506)
   at android.view.View.draw(View.java:16539)
   at android.widget.FrameLayout.draw(FrameLayout.java:598)
   at android.view.View.updateDisplayListIfDirty(View.java:15466)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.View.draw(View.java:16258)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3713)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506)
   at android.view.View.updateDisplayListIfDirty(View.java:15461)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.View.draw(View.java:16258)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3713)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506)
   at android.view.View.updateDisplayListIfDirty(View.java:15461)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.View.draw(View.java:16258)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3713)
   at com.shaiban.audioplayer.mplayer.slidinguppanel.SlidingUpPanelLayout.drawChild(SourceFile:964)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506)
   at android.view.View.draw(View.java:16539)
   at com.shaiban.audioplayer.mplayer.slidinguppanel.SlidingUpPanelLayout.draw(SourceFile:1013)
   at android.view.View.updateDisplayListIfDirty(View.java:15466)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.View.draw(View.java:16258)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3713)
   at android.support.v4.widget.DrawerLayout.drawChild(SourceFile:1377)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506)
   at android.view.View.updateDisplayListIfDirty(View.java:15461)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.View.draw(View.java:16258)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3713)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506)
   at android.view.View.updateDisplayListIfDirty(View.java:15461)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.View.draw(View.java:16258)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3713)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506)
   at android.view.View.updateDisplayListIfDirty(View.java:15461)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.View.draw(View.java:16258)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3713)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506)
   at android.view.View.updateDisplayListIfDirty(View.java:15461)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.View.draw(View.java:16258)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3713)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506)
   at android.view.View.updateDisplayListIfDirty(View.java:15461)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.View.draw(View.java:16258)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3713)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506)
   at android.view.View.draw(View.java:16539)
   at android.widget.FrameLayout.draw(FrameLayout.java:598)
   at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:3111)
   at android.view.View.updateDisplayListIfDirty(View.java:15466)
   at android.view.View.getDisplayList(View.java:15488)
   at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:309)
   at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:315)
   at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:354)
   at android.view.ViewRootImpl.draw(ViewRootImpl.java:2956)
   at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2753)
   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2339)
   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1314)
   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7057)
   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:829)
   at android.view.Choreographer.doCallbacks(Choreographer.java:606)
   at android.view.Choreographer.doFrame(Choreographer.java:576)
   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:815)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:145)
   at android.app.ActivityThread.main(ActivityThread.java:7007)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

【问题讨论】:

  • 这意味着对象的终结器花费了太长时间。要么它真的很大,要么线程暂停是出于某种原因——可能是死锁。
  • 感谢您的快速回复。知道如何检测代码的哪一部分导致了这种情况吗?因为有了日志,我只能在堆栈跟踪上方看到,并且没有提到来自应用程序代码的来源。
  • 它的起源是垃圾收集器。 Finalize 大致类似于一个析构函数,但没有承诺何时/是否会调用它。它在对象被内存收集之前调用。
  • 好的。如何解决这个问题?

标签: android


【解决方案1】:

好的 - 这是我的答案: 当垃圾收集器确定不再有对该对象的引用时,垃圾收集器对对象调用受保护的方法 finalize。 子类覆盖 finalize 方法以释放系统资源或执行其他清理。 就像在Google Developer Documentation 中一样

事实上,我在我的应用程序中遇到了同样的问题,它在一秒钟内绘制了数百条路径: 见Visual Sounds Music Visualizer 而我的 Google Play Console 统计数据显示它仅适用于 Android 5.1

java.util.concurrent.TimeoutException: 
1. at android.graphics.Path.finalizer (Native Method)
2. at android.graphics.Path.finalize (Path.java:748)
3. at java.lang.Daemons$FinalizerDaemon.doFinalize (Daemons.java:206)
4. at java.lang.Daemons$FinalizerDaemon.run (Daemons.java:189)
5. at java.lang.Thread.run (Thread.java:818)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多