java.lang.StackOverFlow错误。怀疑太多意见?

时间:2010-05-04 05:05:35

标签: android android-layout android-view

当您收到类似下面的错误(Android 1.5)时,是因为嵌套的ViewGroup太多,还是因为View的总数太大了?是否有任何技巧可以解决它,同时仍然保持您的应用程序相同的外观?

java.lang.StackOverflowError
   at android.text.Styled.measureText(Styled.java:371)
   at android.text.Layout.measureText(Layout.java:1600)
   at android.text.Layout.getLineMax(Layout.java:654)
   at android.text.Layout.draw(Layout.java:310)
   at android.text.BoringLayout.draw(BoringLayout.java:356)
   at android.widget.TextView.onDraw(TextView.java:3921)
   at android.view.View.draw(View.java:5838)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.widget.AbsListView.dispatchDraw(AbsListView.java:1319)
   at android.widget.ListView.dispatchDraw(ListView.java:2820)
   at android.view.View.draw(View.java:5944)
   at android.widget.AbsListView.draw(AbsListView.java:2121)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1847)
   at android.view.ViewRoot.draw(ViewRoot.java:1217)
   at android.view.ViewRoot.performTraversals(ViewRoot.java:1030)
   at android.view.ViewRoot.handleMessage(ViewRoot.java:1482)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:123)
   at android.app.ActivityThread.main(ActivityThread.java:3948)
   at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:521)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
   at dalvik.system.NativeStart.main(Native Method)

8 个答案:

答案 0 :(得分:32)

你有(太多)嵌套布局。您可以访问d.android.com上的官方Android博客,获取有关如何优化布局的提示和技巧。

答案 1 :(得分:6)

就我而言,我在

中解决了
  

onCreateView

        rootView = inflater.inflate(R.layout.fragment_interest_list, container);
        return rootView;
     

添加 attachToRoot 参数

         rootView = inflater.inflate(R.layout.fragment_interest_list,container,false);
         return rootView;

答案 2 :(得分:5)

在我的情况下,它是由嵌套布局(复杂列表itens)引起的,位于另一个片段内的片段视图分页器中的列表中,使用v4支持和HoloEverywhere v1.4库。

我必须删除嵌套的片段并以不同的方式构建它。

答案 3 :(得分:2)

就我而言,

自定义列表视图具有相对布局,然后发布Stackoverflowerror

如果您的listview具有相对布局,请将其删除:D

答案 4 :(得分:0)

我的情况是ListViewScrollView,当我尝试将其滚动到底部时。它会产生堆栈溢出错误。

因此,请避免ListView内有ScrollView

或者我们可以使用不同的方法来实现ListView。

Android list view inside a scroll view

答案 5 :(得分:0)

在我的案例和XamarinForms中,我通过向CachingStrategy="RecycleElement"添加ListView并删除了额外的布局来解决了这个错误。
Android用户应使用RecyclerView或其他视图回收方法。

答案 6 :(得分:0)

对于Xamarin Forms,在我们的情况下,使用ListViews没有解决问题,异常一直在我们有旋转木马上升,我们无法从另一个线程调用draw方法,因为一些图形涂有NControl我们需要不允许我们这样做(我猜是OpenGL相关)。所以最后只是在我们的轮播自定义渲染器中捕获异常并在其上调用Invalidate()解决了问题。

答案 7 :(得分:-2)

使用约束布局的日子已经改变,单个约束布局可以使您的视图层次扁平化

结帐:https://developer.android.com/training/constraint-layout