Подтвердить что ты не робот

Ошибка java.lang.StackOverFlow. Подозревали слишком много просмотров?

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

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)
4b9b3361

Ответ 1

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

Ответ 2

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

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;

Ответ 3

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

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

Ответ 4

В моем случае

В настроенном виде списка есть Relative Layout, затем он отпускается Stackoverflowerror.

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

Ответ 5

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

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

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

Дни изменились, используйте макет "Ограничить", один макет ограничений может сгладить иерархию ваших представлений

Проверять, выписываться: https://developer.android.com/training/constraint-layout