java.lang.StackOverFlow error. Suspected too many views?

房东的猫 提交于 2019-12-17 06:47:34

问题


When you get an error like the one below (Android 1.5), is it because there are too many nested ViewGroups, or because the total number of Views is too great? Are there any tricks to get around it while still keeping the same look to your app?

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)

回答1:


You have (way) too many nested layouts. You can check out the official Android blog at d.android.com to get tips and tricks on how to optimize layouts.




回答2:


in my case I resolved by in

onCreateView

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

by adding attachToRoot parameter

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



回答3:


In my case it was caused by nested layouts (complex list itens) in a list inside a fragment view pager inside another fragment, using v4 support and HoloEverywhere v1.4 libraries.

I had to remove nested fragments and build it in a different way.




回答4:


In my case,

Customized list view has Relative Layout, then it released Stackoverflowerror.

If your listview has relative layout, then erase it :D




回答5:


In my case that was ListView inside a ScrollView and when I try to Scroll it to the bottom. It produces stackoverflow error.

So, avoid to have ListView inside ScrollView.

Or we can use different approach to implement ListView.

Android list view inside a scroll view




回答6:


In my case and in XamarinForms, I solved this error by adding CachingStrategy="RecycleElement" to my ListView and also removing extra layouts.
Android users should use RecyclerView or other view recycling methods.




回答7:


For Xamarin Forms in our case using ListViews didn't resolve the issue, the exception kept raising on a carousel we have, and we can't call the draw method from another thread because some graphics painted with NControl we need doesn't allow us to do that (OpenGL related I guess). So in the end just catching the exception in our carousel custom renderer and calling Invalidate() on it resolved the problem.




回答8:


Days have changed use Constrain layout, a single constraint layout can flatten your view hierarchy

Checkout: https://developer.android.com/training/constraint-layout



来源:https://stackoverflow.com/questions/2762924/java-lang-stackoverflow-error-suspected-too-many-views

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!