Android 堆栈溢出:由嵌套视图引起?

Android 堆栈溢出:由嵌套视图引起?,android,layout,stack-overflow,Android,Layout,Stack Overflow,刷新SlidingRay中的视图时发生崩溃(自定义SlidingDrawer来自顶部) 我不知道是什么引起的。。但我的第一个猜测是,这是由于嵌套布局的数量 嵌套布局的最大数量是多少? 是特定于设备的吗?我如何确定这是否是原因 如果不是,这些都是原因。。是什么 堆栈跟踪: E/AndroidRuntime( 2199): FATAL EXCEPTION: main E/AndroidRuntime( 2199): java.lang.StackOverflowError E/AndroidRunt

刷新SlidingRay中的视图时发生崩溃(自定义SlidingDrawer来自顶部)

我不知道是什么引起的。。但我的第一个猜测是,这是由于嵌套布局的数量

嵌套布局的最大数量是多少?

是特定于设备的吗?我如何确定这是否是原因

如果不是,这些都是原因。。是什么

堆栈跟踪:

E/AndroidRuntime( 2199): FATAL EXCEPTION: main
E/AndroidRuntime( 2199): java.lang.StackOverflowError
E/AndroidRuntime( 2199): at android.graphics.Paint.measureText(Paint.java:1057)
E/AndroidRuntime( 2199): at android.text.Styled.drawDirectionalRun(Styled.java:267)
E/AndroidRuntime( 2199): at android.text.Styled.measureText(Styled.java:430)
E/AndroidRuntime( 2199): at android.text.Layout.measureText(Layout.java:1655)
E/AndroidRuntime( 2199): at android.text.Layout.getLineMax(Layout.java:689)
E/AndroidRuntime( 2199): at android.text.Layout.draw(Layout.java:340)
E/AndroidRuntime( 2199): at android.text.BoringLayout.draw(BoringLayout.java:365)
E/AndroidRuntime( 2199): at android.widget.TextView.onDraw(TextView.java:4168)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6880)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.widget.FrameLayout.draw(FrameLayout.java:357)
E/AndroidRuntime( 2199): at android.widget.ScrollView.draw(ScrollView.java:1409)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.buildDrawingCache(View.java:6640)
E/AndroidRuntime( 2199): at android.view.View.getDrawingCache(View.java:6428)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1571)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1392)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.widget.FrameLayout.draw(FrameLayout.java:357)
E/AndroidRuntime( 2199): at android.widget.ScrollView.draw(ScrollView.java:1409)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6986)
E/AndroidRuntime( 2199): at android.widget.FrameLayout.draw(FrameLayout.java:357)
E/AndroidRuntime( 2199): at android.widget.HorizontalScrollView.draw(HorizontalScrollView.java:1409)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at com.vodafone.onm.components.SlidingTray.dispatchDraw(SlidingTray.java:426)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.widget.FrameLayout.draw(FrameLayout.java:357)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.widget.FrameLayout.draw(FrameLayout.java:357)
E/AndroidRuntime( 2199): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java)
更新: 层次结构查看器快照

有些人认为我认为是相关的:

嵌套布局的最大数量是多少

没有特定的值。当堆栈空间用完时,堆栈空间就用完了,这取决于您正在做什么。我听说主应用程序线程有一个8KB的堆栈

这就是说,如果层次结构视图显示的深度为10或更多(从根到最深的叶子),我开始感到紧张,到15岁时,您可能会开始遇到异常。你的图像,几乎难以辨认,似乎有一个深度远远高于这一点


您似乎有许多层被浪费了。如果在关键路径的“层次结构”视图中有一个层,该层有一个父级和一个子级,则该层是要删除的主要候选层,因为它可能不会添加任何值。你至少有5个这样的候选人。即使清除所有这些内容也可能不够,但这是一个起点。

请为createView或您正在执行的任何操作发布一些代码。代码太多了:-s,但层次结构查看器快照如何?请确保在重新创建/绘制时不会导致递归调用。如果没有,那么太多嵌套视图可能是问题所在。至于限制,它将取决于堆栈大小,我认为这取决于固件。问题是,我有一个滑动抽屉/托盘,可拉动刷新,水平滚动,有几个页面,每个页面都有垂直滚动视图,有4个大按钮,每个按钮都有自己的滚动视图。。。里面有数据…神圣的烟雾。所以(从技术上讲),这看起来有点疯狂。有两个相当稳定的视图运行,只有一个子视图,应该可以通过或其他方式折叠。另外,你正在做的一些事情听起来很吓人,你应该看看ViewPager或其他东西,重新考虑一下你的布局Hanks,我正试图减少到15个(删除一些功能)。当我完成后,我会回来测试它。它成功了。它有17层深度,工作时不会发生碰撞。。但我也在想,我移除的其中一个东西是否也有助于解决克拉夏问题。我使用view.layout(…)移动一个视图来模拟一个滚动视图(创建一个拉来刷新滚动视图将非常复杂)。你有没有任何线索,如果这与移动屏幕的刷新一起也会导致那样的崩溃?@NeTeInStEiN:我没有线索,抱歉。@Commonware我有类似的问题,我得到了stackoverflow错误,正如你所说的,如果在层次视图中的关键路径上有一个层,它有一个父层和一个子层,这是一个主要的候选被删除,因为它可能不会增加任何价值。你能再解释一下吗。我想我的问题就是因为这个。我包括一个布局,它是
TableLayout
,它只有一个
TableRow
和六个图像。您能详细说明一下吗?@BBdev:“我包括一个布局,它是TableLayout,只有一个TableRow和六个图像。您能详细说明一下吗?”--用水平
线性布局替换它。只有一行
TableLayout
没有任何价值。