【问题标题】:java.lang.StackOverFlow error. Suspected too many views?java.lang.StackOverFlow 错误。怀疑浏览量过多?
【发布时间】:2010-05-04 05:05:34
【问题描述】:

当你遇到如下错误(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)

【问题讨论】:

  • 嘿,这个问题的解决方案是什么?? @synic
  • 这个问题的解决方法是什么......

标签: android android-layout android-view


【解决方案1】:

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

【讨论】:

【解决方案2】:

在我的情况下,我解决了

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;

【讨论】:

  • 在我的情况下这不起作用,我不得不将其更改为 inflater.inflate(R.layout.some_layout, null)
  • 就我而言,我以前有:rootView = inflater.inflate(R.layout.fragment_layout, container, true);我将其设置为:rootView = inflater.inflate(R.layout.fragment_layout, container, false),瞧!它奏效了。
【解决方案3】:

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

我不得不移除嵌套的片段并以不同的方式构建它。

【讨论】:

    【解决方案4】:

    就我而言,

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

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

    【讨论】:

    • 就我而言,这是为我做的。在片段视图分页器内,在片段视图分页器内有一个 ListView,带有一个 RelativeLayout 会导致 API
    【解决方案5】:

    在我的情况下,ListViewScrollView 内,当我尝试将其滚动到底部时。它会产生 stackoverflow 错误。

    所以,避免在ScrollView 中包含ListView

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

    Android list view inside a scroll view

    【讨论】:

      【解决方案6】:

      就我而言,在 XamarinForms 中,我通过将 CachingStrategy="RecycleElement" 添加到我的 ListView 并删除额外的布局来解决此错误。
      Android 用户请使用RecyclerView 或其他视图回收方式。

      【讨论】:

        【解决方案7】:

        在我们的案例中,使用 ListViews 的 Xamarin Forms 并没有解决问题,在我们拥有的轮播上不断出现异常,并且我们无法从另一个线程调用 draw 方法,因为我们需要使用 NControl 绘制的一些图形不需要'不允许我们这样做(我猜与OpenGL相关)。因此,最终只需在我们的轮播自定义渲染器中捕获异常并对其调用 Invalidate() 即可解决问题。

        【讨论】:

          猜你喜欢
          • 2013-03-06
          • 2016-06-04
          • 2017-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-21
          • 2018-10-18
          相关资源
          最近更新 更多