it-swarm.com.ru

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

Когда вы получаете сообщение об ошибке, аналогичное приведенному ниже (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)
23
synic

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

32
Romain Guy

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

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;
6
Ishtiaq

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

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

5
JPMagalhaes

В моем случае, 

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

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

2
larsien

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

0
Dr TJ

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

Поэтому избегайте иметь ListView внутри ScrollView.

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

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

0
Vinit Siriah

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

0
Pablo López Martínez