2012-03-30 2 views
11

У меня случился сбой при обновлении вида внутри SlidingTray (пользовательский SlidingDrawer, идущий сверху).Stackoverflow: вызвано вложенными представлениями?

Я не уверен, что причиной его .. но мой первый думаю, что это связано с количеством вложенных макетов ...

Какое максимальное количество вложенных макетов?

Является ли это конкретным устройством, как я могу быть уверен, что это причина?

Если это не так, любая из этих вещей вызывает это. Что такое?

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) 

UPDATE: Иерархия просмотра снимков

.

Некоторые думают, что я думаю, связаны: http://www.mail-archive.com/[email protected]/msg48036.html

+0

Пожалуйста, разместите код для createView или что бы вы ни делали – jsimpson

+1

Слишком много кода: -S, но как насчет моментального снимка просмотра иерархии? – neteinstein

+1

Просто убедитесь, что вы не вызываете рекурсивных вызовов при переработке/рисовании. Если вы не так, слишком много вложенных представлений могут быть проблемой. Что касается предела, это будет зависеть от размера стека, и я думаю, что это зависит от прошивки. – jsimpson

ответ

22

Какое максимальное количество вложенных макетов?

Особое значение не существует. У вас заканчивается пространство стека, когда у вас заканчивается пространство стека, и это будет зависеть от того, что вы делаете. Основной поток приложений имеет стек 8 КБ, последний раз я слышал.

Это означает, что если Иерархический вид показывает глубину 10 или более (корень до самого глубокого листа), я начинаю нервничать, и к 15 вы, скорее всего, начнете работать в исключениях. Ваше изображение, которое почти неразборчиво, похоже, имеет глубину, значительно превышающую ее.

У вас, похоже, есть несколько потерянных слоев. Если у вас есть слой в представлении иерархии, на критическом пути, который имеет один родительский и один дочерний элемент, это лучший кандидат для удаления, поскольку он может не добавлять значения. У вас есть как минимум 5 из этих кандидатов. Даже очистки всего этого может быть недостаточно, но это отправная точка.

+0

Спасибо, я пытаюсь уменьшить до 15 (удаление некоторых функций). Я вернусь, когда я это сделаю и протестирую. – neteinstein

+0

Это сработало. С 17 уровнями глубины он работает без сбоев .. но я также задаюсь вопросом, помогла ли одна из вещей, которую я удалила, в решении проблемы краши. Я использовал view.layout (...), чтобы переместить представление для имитации ScrollView (чтобы создать Pull to Refresh, что с просмотром прокрутки будет очень сложным). Есть ли у вас какие-либо подсказки, если это вместе с обновлением движущегося экрана может также вызвать сбой? – neteinstein

+0

@NeTeInStEiN: У меня нет подсказки, извините. – CommonsWare

Смежные вопросы