2010-05-04 8 views
23

Cuando aparece un error como el siguiente (Android 1.5), ¿es porque hay demasiados grupos de vistas anidados o porque el número total de vistas es demasiado grande? ¿Hay algún truco para evitarlo y mantener el mismo aspecto en tu aplicación?java.lang.StackOverFlow error. ¿Sospecha demasiados puntos de vista?

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) 
+0

hey cuál es la solución a este problema ?? @synic – Venkat

+0

cuál es la solución de este problema ... – NagarjunaReddy

Respuesta

32

Tiene (camino) demasiados diseños anidados. Puede consultar el blog oficial de Android en d.android.com para obtener sugerencias y trucos sobre cómo optimizar diseños.

+1

allanar su jerarquía de vista reemplazando sus diseños por relativo. Serie de artículos que Romain sugirió aquí: http://android-developers.blogspot.com/search/label/Optimization –

+44

La pregunta es: ¿cuánto es demasiado? Está documentado? – neteinstein

+1

Actualización: información sobre un posible valor de referencia: http://stackoverflow.com/questions/9946368/stackoverflow-caused-by-nested-views – neteinstein

2

En mi caso,

personalizada vista de lista tiene de disposición relativa, entonces es liberado Stackoverflowerror.

Si su listview tiene la disposición relativa, a continuación, borrarlo: D

+1

En mi caso, esto lo hizo por mí. Tener un ListView, dentro de un paginador de vista de fragmento, dentro de un paginador de vista de fragmento, con un RelativeLayout estaba causando bloqueos en API <14. Eliminar el RelativeLayout volver a trabajar el diseño de la vista de lista hizo el truco (y el rendimiento también es mucho mejor). – dell116

5

En mi caso fue causado por diseños anidados (lista compleja itens) en una lista dentro de una vista fragmento de localizador dentro de otro fragmento de, utilizando v4 soporte y bibliotecas de HoloEverywhere v1.4.

Tuve que eliminar fragmentos anidados y compilarlo de una manera diferente.

0

En mi caso fue ListView dentro de un ScrollView y cuando intento Desplazarlo hacia la parte inferior. Produce un error de stackoverflow.

Por lo tanto, evite tener ListView dentro de ScrollView.

O podemos utilizar un enfoque diferente para implementar ListView.

Android list view inside a scroll view

6

en mi caso resuelto por en

onCreateView

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

añadiendo attachToRoot parámetro

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

En mi caso esto no funcionó, tuve que cambiarlo a inflater.inflate (R.layout.some_layout, null) – vanomart

+0

En mi caso, anteriormente tenía: rootView = inflater.inflate (R.layout.fragment_layout, container , cierto); Lo configuré para: rootView = inflater.inflate (R.layout.fragment_layout, container, false) y ¡listo! funcionó. –

0

En mi caso y en XamarinForms, he resuelto este error agregando CachingStrategy="RecycleElement" a mi ListView y también quitando diseños adicionales.
Los usuarios de Android deben usar RecyclerView u otros métodos de reciclaje de vistas.

0

For Xamarin Formas en nuestro caso usando ListViews no resolvió el problema, la excepción siguió aumentando en un carrusel que tenemos, y no podemos llamar al método de dibujo de otro hilo porque algunos gráficos pintados con NControl no necesitamos No nos permiten hacer eso (relacionado con OpenGL, supongo). Por lo tanto, al final, capturar la excepción en nuestro renderizador personalizado de carrusel y llamar a Invalidate() resolvió el problema.

Cuestiones relacionadas