Ошибка java.lang.StackOverFlow. Подозреваемый слишком много просмотров? - PullRequest
23 голосов
/ 04 мая 2010

Когда вы получаете сообщение об ошибке, подобное приведенной ниже (Android 1.5), это связано с тем, что слишком много вложенных групп ViewGoS или из-за того, что общее количество просмотров слишком велико? Есть ли какие-нибудь хитрости, чтобы обойти это, сохраняя при этом тот же внешний вид для вашего приложения?

java.lang.StackOverflowError
   at android.text.Styled.measureText(Styled.java:371)
   at android.text.Layout.measureText(Layout.java:1600)
   at android.text.Layout.getLineMax(Layout.java:654)
   at android.text.Layout.draw(Layout.java:310)
   at android.text.BoringLayout.draw(BoringLayout.java:356)
   at android.widget.TextView.onDraw(TextView.java:3921)
   at android.view.View.draw(View.java:5838)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.widget.AbsListView.dispatchDraw(AbsListView.java:1319)
   at android.widget.ListView.dispatchDraw(ListView.java:2820)
   at android.view.View.draw(View.java:5944)
   at android.widget.AbsListView.draw(AbsListView.java:2121)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1847)
   at android.view.ViewRoot.draw(ViewRoot.java:1217)
   at android.view.ViewRoot.performTraversals(ViewRoot.java:1030)
   at android.view.ViewRoot.handleMessage(ViewRoot.java:1482)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:123)
   at android.app.ActivityThread.main(ActivityThread.java:3948)
   at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:521)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
   at dalvik.system.NativeStart.main(Native Method)

Ответы [ 7 ]

32 голосов
/ 04 мая 2010

У вас слишком много вложенных макетов. Вы можете проверить официальный блог Android на d.android.com, чтобы получить советы и рекомендации по оптимизации макетов.

6 голосов
/ 07 сентября 2015

в моем случае я решил в

onCreateView

        rootView = inflater.inflate(R.layout.fragment_interest_list, container);
        return rootView;

, добавив attachToRoot параметр

         rootView = inflater.inflate(R.layout.fragment_interest_list,container,false);
         return rootView;
5 голосов
/ 05 декабря 2012

В моем случае это было вызвано вложенными макетами (сложными списками) в списке внутри фрагмента просмотра пейджера внутри другого фрагмента с использованием поддержки v4 и библиотек HoloEverywhere v1.4.

Мне пришлось удалить вложенные фрагменты и построить его другим способом.

2 голосов
/ 11 июля 2011

В моем случае

Настроенный список имеет Относительное расположение, затем он выпустил Stackoverflowerror.

Если ваш listview имеет относительную компоновку, удалите его: D

0 голосов
/ 03 ноября 2016

Для форм Xamarin в нашем случае использование ListViews не решило проблему, исключение продолжало расти на карусели, которую мы имеем, и мы не можем вызвать метод рисования из другого потока, потому что некоторая графика, нарисованная с помощью NControl, нам не нужна я не могу этого сделать (я думаю, что это связано с OpenGL). Поэтому, в конце концов, перехват исключительной ситуации в нашем пользовательском рендерере карусели и вызов Invalidate () позволил решить проблему.

0 голосов
/ 09 августа 2016

В моем случае и в XamarinForms я решил эту ошибку, добавив CachingStrategy="RecycleElement" к своему ListView, а также удалив дополнительные макеты.
Пользователи Android должны использовать RecyclerView или другие методы просмотра.

0 голосов
/ 01 января 2014

В моем случае это было ListView внутри ScrollView, и когда я пытаюсь прокрутить его вниз. Выдает ошибку переполнения стека.

Итак, избегайте иметь ListView внутри ScrollView.

Или мы можем использовать другой подход для реализации ListView.

Представление списка Android в представлении прокрутки

...