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

发布于 2024-09-28 19:49:52 字数 6611 浏览 5 评论 0原文

该应用程序在模拟器中运行良好。此问题出现在 Sprint HTC Android 手机上。

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

这是结果的堆栈跟踪:

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 方法有点怀疑。

有人有什么想法吗?

The application works fine in the emulator. This issue manifests on the Sprint HTC Android phone.

The program uses a TabActivity which contains a MapHandler / ItemizedOverlay. When a marker on the map is touched, the overlay onTap method is called. In this method, an alert dialog is displayed then, after a button is pressed, the view is switched to the view containing the details of the location. The view is switched by sending a message to the MapHandler which in turn uses a viewswitcher to swap them out.
Again, there are no issues in the emulator, only on the phone.

Here is the stack trace that results:

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)

I'm a little suspicious of the sendmessage/viewswitcher method.

Anyone have any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

疾风者 2024-10-05 19:49:52

如果您的视图层次结构太深,则可能会发生这种情况。当绘制或分派事件时,视图层次结构将被递归遍历。您通常可以做一些事情,比如用RelativeLayouts替换几个嵌套的LinearLayouts来减少树的总深度。

This can happen if your view hierarchy is too deep. When drawing or dispatching events the view hierarchy is traversed recursively. You can usually do things like replace several nested LinearLayouts with RelativeLayouts to reduce the total depth of the tree.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文