Stackoverflow: ¿Causado por vistas anidadas?

Estoy teniendo un locking al actualizar una vista dentro de un SlidingTray (SlidingDrawer personalizado que viene de la parte superior).

No estoy seguro de lo que lo está causando … pero mi primera suposición es que se debe a la cantidad de diseños nesteds …

¿Cuál es la cantidad máxima de diseños nesteds?

¿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?

La 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 : instantánea del visor de jerarquía

  • http://d.pr/kXnp

.

Algunos piensan que creo que están relacionados: http://www.mail-archive.com/android-developers@googlegroups.com/msg48036.html

¿Cuál es la cantidad máxima de diseños nesteds?

No hay un valor específico Te quedas sin espacio en la stack cuando te quedas sin espacio en la stack, y eso dependerá de lo que estés haciendo. El hilo principal de la aplicación tiene una stack 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.