2012-03-30 12 views
11

Estoy teniendo un bloqueo al actualizar una vista dentro de un SlidingTray (SlidingDrawer personalizado viene de la parte superior).Stackoverflow: ¿Causado por vistas anidadas?

No estoy seguro de lo que causa que .. pero mi primera suposición es que es debido a la cantidad de diseños anidados ...

¿Cuál es el número máximo de diseños anidados?

¿Es específico del dispositivo? ¿Cómo puedo estar seguro de que esa es la causa?

Si no es así, cualquiera de estas cosas lo está causando ... ¿qué es?

El StackTrace:

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) 

ACTUALIZACIÓN: Jerarquía Visor de instantáneas

.

Algunos piensa Creo que están relacionados: http://www.mail-archive.com/[email protected]/msg48036.html

+0

Por favor, publique un código para createView o lo que sea que esté haciendo – jsimpson

+1

Es demasiado código: -S, pero ¿qué tal una instantánea del visor de la jerarquía? – neteinstein

+1

Solo asegúrese de que de alguna manera no está causando llamadas recursivas mientras recicla/dibuja. Si no es así, el problema podría ser demasiadas vistas anidadas. En cuanto al límite, dependerá del tamaño de la pila, y creo que esto depende del firmware. – jsimpson

Respuesta

22

¿Cuál es el número máximo de diseños anidados?

No hay un valor específico. Te quedas sin espacio en la pila cuando te quedas sin espacio en la pila, y eso dependerá de lo que estés haciendo. El hilo principal de la aplicación tiene una pila de 8 KB, lo último que escuché.

Dicho esto, si Hierarchy View muestra una profundidad de 10 o más (de la raíz a la hoja más profunda), empiezo a ponerme nervioso, y para el 15 es probable que empiece a encontrar excepciones. Su imagen, que es casi ilegible, parece tener una profundidad sustancialmente más alta que eso.

Parece que tiene varias capas desperdiciadas. Si tiene una capa en la vista de jerarquía, en la ruta crítica, que tiene un padre y un hijo, ese es un candidato principal que debe eliminarse, ya que puede no estar agregando ningún valor. Tienes al menos 5 de estos candidatos. Incluso limpiar todo eso puede no ser suficiente, pero es un punto de partida.

+0

Gracias, estoy tratando de reducirlo a 15 (eliminando algunas funciones). Volveré cuando lo haya hecho y lo probaré. – neteinstein

+0

Funcionó. Con 17 capas de profundidad, funciona sin bloqueos ... pero también me pregunto si una de las cosas que eliminé también me ayudó a resolver el crasha. Utilicé view.layout (...) para mover una vista para simular un ScrollView (para crear un pull para actualizar que con una vista de desplazamiento sería muy complicado). ¿Tiene alguna pista si esto junto con la actualización de la pantalla en movimiento también puede causar un bloqueo como ese? – neteinstein

+0

@NeTeInStEiN: No tengo ni idea, lo siento. – CommonsWare

Cuestiones relacionadas