在Android中切换视图时的StackOverflowError(在Sprint HTC上测试)

时间:2010-10-24 20:06:47

标签: java android stack-overflow

应用程序在模拟器中正常工作。这个问题体现在Sprint HTC Android手机上。

该程序使用TabActivity,其中包含MapHandler / ItemizedOverlay。触摸地图上的标记时,将调用覆盖onTap方法。在此方法中,将显示警告对话框,然后在按下按钮后,视图将切换到包含位置详细信息的视图。通过向MapHandler发送消息来切换视图,MapHandler又使用viewswitcher将它们交换出来。 同样,模拟器中没有问题,仅在手机上。

以下是产生的堆栈跟踪:

10-24 15:49:33.055: ERROR/AndroidRuntime(10930): Uncaught handler: thread main exiting due to uncaught exception
10-24 15:49:33.360: ERROR/AndroidRuntime(10930): java.lang.StackOverflowError
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.text.BoringLayout.draw(BoringLayout.java:356)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.widget.TextView.onDraw(TextView.java:3934)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.View.draw(View.java:5838)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1540)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.View.draw(View.java:5944)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1540)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.View.draw(View.java:5841)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1540)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.View.draw(View.java:5841)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1540)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.View.draw(View.java:5841)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1896)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewRoot.draw(ViewRoot.java:1237)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1504)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.os.Looper.loop(Looper.java:123)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.app.ActivityThread.main(ActivityThread.java:4077)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at java.lang.reflect.Method.invokeNative(Native Method)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at java.lang.reflect.Method.invoke(Method.java:521)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at dalvik.system.NativeStart.main(Native Method)

我对sendmessage / viewswitcher方法有点怀疑。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您的视图层次结构太深,就会发生这种情况。绘制或分派事件时,将递归遍历视图层次结构。您通常可以使用RelativeLayouts替换多个嵌套的LinearLayouts以减少树的总深度。

相关问题