Интерфейс, диалоги, темы, стили, меню
-
MeTeOpA
- Сообщения: 85
- Зарегистрирован: 07 мар 2012, 12:50
Сообщение
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
Тема просто "ГОРИТ"...
-
andev
- Сообщения: 219
- Зарегистрирован: 13 янв 2012, 17:56
Сообщение
andev » 19 май 2012, 16:19
MeTeOpA писал(а):возникает ошибка в рекурсивной функции. На stackoverflow вычитал что дело в разметке экрана.
Как побороть?
Перепроверить условия выхода, а так же прикинуть глубину рекурсии, может там банально не хватает памяти даже при нормальном построении алгоритма.
Больше информации из консоли с ошибкой трудно достать.
-
damager82
- Администратор
- Сообщения: 1383
- Зарегистрирован: 07 янв 2012, 11:32
-
Контактная информация:
Сообщение
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."
-
neoksi
- Сообщения: 712
- Зарегистрирован: 26 июл 2012, 10:42
-
Контактная информация:
Сообщение
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
-
Контактная информация:
Сообщение
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...