非常奇怪的Android StackOverflowError's

时间:2015-10-19 13:36:07

标签: android stack-overflow

我有错误:

java.lang.StackOverflowError: stack size 8MB
    at android.os.MessageQueue.nativePollOnce(Native Method)
    at android.os.MessageQueue.next(MessageQueue.java:143)
    at android.os.Looper.loop(Looper.java:195)
    at android.app.ActivityThread.main(ActivityThread.java:5373)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

java.lang.StackOverflowError: stack size 8MB
    at android.view.ThreadedRenderer.nInitialize(Native Method)
    at android.view.ThreadedRenderer.initialize(ThreadedRenderer.java:147)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1649)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1065)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5901)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
    at android.view.Choreographer.doCallbacks(Choreographer.java:580)
    at android.view.Choreographer.doFrame(Choreographer.java:550)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:211)
    at android.app.ActivityThread.main(ActivityThread.java:5373)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

我没有想法,是什么导致他们。这些错误可以随时抛出。 我从用户的设备上获得的这些痕迹,我不能用我的那些重复。 你有什么假设吗?

注意!堆栈跟踪中没有我的方法!只有Android / Java!

1 个答案:

答案 0 :(得分:0)

你有什么Logcat Thows

java.lang.StackOverflowError: stack size 8MB
  

当Java应用程序调用函数调用时,堆栈框架   在调用堆栈上分配。堆栈框架包含   调用方法的参数,其本地参数和返回值   方法的地址。返回地址表示执行点   从中调用后,程序执行将继续执行   方法返回。如果没有新的堆栈框架的空间那么,   Java虚拟机(JVM)抛出StackOverflowError。

如何处理StackOverflowError

最简单的解决方案是仔细检查堆栈跟踪并检测行号的重复模式。这些行号表示递归调用的代码。一旦检测到这些行,就必须仔细检查代码并理解递归永远不会终止的原因。

如果您已验证正确实现了递归,则可以增加堆栈的大小,以允许更多的调用。根据安装的Java虚拟机(JVM),默认线程堆栈大小可能等于512KB或1MB。

为了更好Info

http://docs.oracle.com/javase/7/docs/api/java/lang/StackOverflowError.html