Внезапное завершение работы приложения без каких-либо действий, создает исключение IllegalStateException onMeasure()

Мое приложение всегда отключается через произвольный промежуток времени (в основном от нескольких минут до примерно 20 минут). Появится окно сообщения "Приложение перестало работать". Самая большая проблема в том, что я ничего не делаю в приложении (например, не взаимодействую с ним), а просто происходит случайное отключение. Вот печать logcat:

07-15 20:34:16.595 27361-27363/test.game D/dalvikvm: GC_CONCURRENT freed 141
9K, 44% free 13902K/24391K, paused 4ms+9ms, total 66ms
07-15 20:34:28.997 27361-27363/test.game D/dalvikvm: GC_CONCURRENT freed 1416K, 43% free 13903K/24391K, paused 3ms+7ms, total 56ms
07-15 20:34:29.418 27361-27361/test.game D/AndroidRuntime: Shutting down VM
07-15 20:34:29.418 27361-27361/test.game W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x412b52a0)
07-15 20:34:29.498 27361-27361/test.game E/AndroidRuntime: FATAL EXCEPTION: main java.lang.IllegalStateException: onMeasure() did not set the measured dimension by calling setMeasuredDimension()
at android.view.View.measure(View.java:15293)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
at android.view.View.measure(View.java:15288)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
at android.view.View.measure(View.java:15288)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4876)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:15288)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4876)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1396)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
at android.view.View.measure(View.java:15288)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4876)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2397)
at android.view.View.measure(View.java:15288)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1974)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1217)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1390)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1113)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4481)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
at android.view.Choreographer.doCallbacks(Choreographer.java:555)
at android.view.Choreographer.doFrame(Choreographer.java:525)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4867)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
at dalvik.system.NativeStart.main(Native Method)

Можно сказать, это потому, что я не писал setMeasuredDimension() при переопределении метода onMeasure(), Кроме того, в документах говорится, что вы должны написать эту строку в свой onMeasure, в противном случае будет выдано исключение IllegalStateException ( см. Здесь).

Но я не переопределяю onMeasure где-нибудь во всем моем проекте, так что проблема не здесь (по крайней мере, на моей стороне в этом случае).

Несколько вещей, чтобы отметить:

  • это полный журнал logcat, и любая из этих строк ("на android....") не ссылается на мой код, все идет к исходному тексту - это означает, что все эти ссылки серые
  • это исключение всегда происходит только на моем S3 Mini (android 4.1.2), но никогда не происходило на моем старом Galaxy Ace S5830i (android 2.3.6) (и да, я тестировал его много раз - более 20 часов на старом телефоне и приложение все еще работает!).
  • никогда не было в эмуляторе
  • нет никаких операций "изменения размера представления", работающих в фоновом режиме, что могло бы вызвать это исключение

Я хотел бы опубликовать некоторый код, но я абсолютно не знаю, где это исключение может быть сгенерировано.

Если кто-то может помочь, я буду очень, очень благодарен. Я потерян в этот момент...

1 ответ

Поскольку здесь нет кода, это всего лишь случайное предположение. Вы можете начать с поиска действий, в которые вы добавили фрагменты. Возможно, действие, содержащее фрагмент, было уничтожено на устройстве из-за неактивности в течение длительного времени (и требований к памяти со стороны системы, что, как мне кажется, является причиной того, что вы обнаруживаете ошибку на устройстве, а не на другом). Так что дело в том, что фрагмент может ссылаться на представление, которое сейчас может быть не прикреплено к окну. (Вы также можете искать представления, которые используют адаптеры фрагментов, такие как viewPager и т. Д., Если вы их использовали).

Другие вопросы по тегам