StackOverflowError при переключении представлений в Android (тестирование на Sprint HTC) - PullRequest
1 голос
/ 25 октября 2010

Приложение отлично работает в эмуляторе.Эта проблема проявляется на телефоне Sprint HTC Android.

Программа использует функцию TabActivity, которая содержит MapHandler / ItemizedOverlay.При касании маркера на карте вызывается метод наложения onTap.В этом методе отображается диалоговое окно с предупреждением, после чего после нажатия кнопки вид переключается на вид, содержащий подробную информацию о местоположении.Вид переключается путем отправки сообщения в MapHandler, который, в свою очередь, использует переключатель просмотров, чтобы поменять их местами.Опять же, в эмуляторе нет проблем, только на телефоне.

Вот трассировка стека, которая приводит:

10-24 15:49:33.055: ERROR/AndroidRuntime(10930): Uncaught handler: thread main exiting due to uncaught exception
10-24 15:49:33.360: ERROR/AndroidRuntime(10930): java.lang.StackOverflowError
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.text.BoringLayout.draw(BoringLayout.java:356)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.widget.TextView.onDraw(TextView.java:3934)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.View.draw(View.java:5838)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1540)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.View.draw(View.java:5944)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1540)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.View.draw(View.java:5841)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1540)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.View.draw(View.java:5841)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1540)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.drawChild(ViewGroup.java:1538)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1282)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.View.draw(View.java:5841)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1896)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewRoot.draw(ViewRoot.java:1237)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1504)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.os.Looper.loop(Looper.java:123)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at android.app.ActivityThread.main(ActivityThread.java:4077)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at java.lang.reflect.Method.invokeNative(Native Method)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at java.lang.reflect.Method.invoke(Method.java:521)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
10-24 15:49:33.360: ERROR/AndroidRuntime(10930):     at dalvik.system.NativeStart.main(Native Method)

Я немного подозрительно отношусь к методу sendmessage / viewswitcher.

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 25 октября 2010

Это может произойти, если ваша иерархия представлений слишком глубока. При отрисовке или отправке событий иерархия представления просматривается рекурсивно. Обычно вы можете заменить несколько вложенных LinearLayouts на RelativeLayouts, чтобы уменьшить общую глубину дерева.

...