StackOverFlowError

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
MeTeOpA
Сообщения: 85
Зарегистрирован: 07 мар 2012, 12:50

StackOverFlowError

Сообщение MeTeOpA » 17 май 2012, 04:33

Ребят, возникает ошибка в рекурсивной функции. На stackoverflow вычитал что дело в разметке экрана.

Как побороть?

Вот сама ошибка.

Код: Выделить всё

05-17 01:04:01.505: E/AndroidRuntime(3095): FATAL EXCEPTION: main
05-17 01:04:01.505: E/AndroidRuntime(3095): java.lang.StackOverflowError
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.graphics.Paint.measureText(Paint.java:1057)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.text.Styled.drawDirectionalRun(Styled.java:267)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.text.Styled.measureText(Styled.java:430)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.text.Layout.measureText(Layout.java:1655)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.text.Layout.getLineMax(Layout.java:689)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.text.Layout.draw(Layout.java:340)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.text.BoringLayout.draw(BoringLayout.java:365)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.widget.TextView.onDraw(TextView.java:4150)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.View.draw(View.java:6880)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.widget.AbsListView.dispatchDraw(AbsListView.java:1480)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.widget.ListView.dispatchDraw(ListView.java:3138)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.View.draw(View.java:6986)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.widget.AbsListView.draw(AbsListView.java:2584)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.View.draw(View.java:6883)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.View.draw(View.java:6883)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.widget.FrameLayout.draw(FrameLayout.java:357)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.View.draw(View.java:6883)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.widget.FrameLayout.draw(FrameLayout.java:357)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.View.draw(View.java:6883)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.widget.FrameLayout.draw(FrameLayout.java:357)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.View.draw(View.java:6883)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.widget.FrameLayout.draw(FrameLayout.java:357)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.View.draw(View.java:6883)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.widget.FrameLayout.draw(FrameLayout.java:357)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.View.draw(View.java:6883)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.widget.FrameLayout.draw(FrameLayout.java:357)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.View.draw(View.java:6883)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.widget.FrameLayout.draw(FrameLayout.java:357)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewRoot.draw(ViewRoot.java:1522)
05-17 01:04:01.505: E/AndroidRuntime(3095): 	at android.view.ViewRoot.perform
Тема просто "ГОРИТ"...

Аватара пользователя
MeTeOpA
Сообщения: 85
Зарегистрирован: 07 мар 2012, 12:50

Re: StackOverFlowError

Сообщение MeTeOpA » 17 май 2012, 17:52

UP! так сказать...

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: StackOverFlowError

Сообщение andev » 19 май 2012, 16:19

MeTeOpA писал(а):возникает ошибка в рекурсивной функции. На stackoverflow вычитал что дело в разметке экрана.
Как побороть?
Перепроверить условия выхода, а так же прикинуть глубину рекурсии, может там банально не хватает памяти даже при нормальном построении алгоритма.
Больше информации из консоли с ошибкой трудно достать.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: StackOverFlowError

Сообщение damager82 » 28 май 2012, 10:22

Седня в одном учебнике увидел такое:

"In an Android system, there is a limitation on the ViewTree that each application can generate. The depth of the tree cannot be deeper than 10 and the width of the three cannot be broader than 50. In Android 1.5 or earlier, there is stack overflow exception thrown when the view tree passes that limit."
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: StackOverFlowError

Сообщение neoksi » 17 апр 2013, 04:40

Сегодня нечто подобное вылезло и не понятно, где именно рекурсия выискалась...
[syntax=java]04-17 04:41:58.959: E/AndroidRuntime(19058): FATAL EXCEPTION: main
04-17 04:41:58.959: E/AndroidRuntime(19058): java.lang.StackOverflowError
04-17 04:41:58.959: E/AndroidRuntime(19058): at java.lang.String.getChars(String.java:1026)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.text.TextUtils.getChars(TextUtils.java:63)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.text.Layout$Ellipsizer.getChars(Layout.java:1863)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.text.Layout$Ellipsizer.charAt(Layout.java:1852)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.text.Layout.getLineVisibleEnd(Layout.java:846)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.text.Layout.draw(Layout.java:266)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.widget.TextView.onDraw(TextView.java:4420)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6880)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1649)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6883)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1649)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6883)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1649)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1647)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.widget.AbsListView.dispatchDraw(AbsListView.java:1480)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.widget.ListView.dispatchDraw(ListView.java:3138)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6986)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.widget.AbsListView.draw(AbsListView.java:2588)
04-17 04:41:58.959: E/AndroidRuntime(19058): at org.holoeverywhere.widget.ListView.draw(ListView.java:314)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1649)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6883)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1649)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6883)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.support.v4.view.ViewPager.draw(ViewPager.java:2092)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1649)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6883)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1649)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6883)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1649)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.buildDrawingCache(View.java:6640)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.getDrawingCache(View.java:6428)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1574)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1647)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1647)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1647)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6883)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.widget.FrameLayout.draw(FrameLayout.java:357)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1649)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at com.slidingmenu.lib.CustomViewAbove.dispatchDraw(CustomViewAbove.java:831)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6883)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1649)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1647)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6883)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.widget.FrameLayout.draw(FrameLayout.java:357)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1649)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6883)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1649)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.drawChild(ViewGroup.java:1647)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1376)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.View.draw(View.java:6883)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.widget.FrameLayout.draw(FrameLayout.java:357)
04-17 04:41:58.959: E/AndroidRuntime(19058): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1866)
04-17 04:41:58.959: E/AndroidRuntime(19058): at android.view.ViewRoot.draw(ViewRoot
[/syntax]

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

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: StackOverFlowError

Сообщение neoksi » 17 апр 2013, 08:53

В общем ответ я нашел тут: http://stackoverflow.com/questions/9293 ... n-listview
И звучит он так:
It means that stack space is exhausted.

Your UI probably has too many layers in its hierarchy. Run the hierarchyviewer program and examine the chart showing your ViewGroups and what they all contain. Try to eliminate some layers (e.g., replace nested LinearLayouts with a single RelativeLayout, get rid of activities-in-tabs and switch to views-in-tabs).

My very rough rule of thumb:

If your hierarchy has <10 layers, you should have no problem
If your hierarchy has 10-14 layers, I get nervous
If your hierarchy has >=15 layers, it's gonna blow up sometimes
Из-за использования библиотеки HoloEverywhere и фрагментов, у меня остается не такой большой запас по иерархии layout. А именно 3 вложения, чтоб в писаться в 15 слоев.

Прочитал статейку про Heirachy Viewer: http://anddev.ru/71/optimizatsiya-ierar ... chies.html
Теперь сижу урезаю иерархию layout, пока удалось с 20 слоев урезать до 18...

Ответить