У меня есть одно действие с парой фрагментов, которое останавливается случайным образом, и я пытаюсь выяснить причину. Проблема, аналогичная этой (Почему активность моего Android останавливается?) но несвязанный ответ.
Активность выполняется на Android Wear, при этом собираются данные акселерометра. Он останавливается только в том случае, если я также взаимодействую с устройством во время его перемещения, например, касаясь экрана. Я пытался:
- Отключение изменения ориентации при встряхивании устройства приводит к изменению конфигурации.
- Отключение
swipeToDismiss
в действии Wear на случай, если касание было неверно истолковано как быстрое смахивание для закрытия. - Переопределение
onLowMemory()
с помощью точек останова, чтобы проверить, не связана ли проблема с ресурсами. - Переопределение
onFinish()
с точками останова в случае непреднамеренного вызоваfinish()
Активность запускается из службы с
Intent startIntent = new Intent( this, WearActivity.class );
startIntent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
startActivity( startIntent );
с активностью, установленной на android:launchMode="singleTask"
, но есть только один запрос на запуск.
У меня закончились идеи. Есть ли способ определить, кто отправляет стоп-сообщение? Ниже приведена полная трассировка стека, активность останавливается получением системного сообщения STOP_ACTIVITY_HIDE
в ActivityThread.handleMessage()
:
at myRandomApp.WearActivity.onStop(WearActivity.java:76)
at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1212)
at android.app.Activity.performStop(Activity.java:5387)
at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3196)
at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3245)
at android.app.ActivityThread.access$1100(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5026)
at java.lang.reflect.Method.invokeNative(Method.java:-1)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(NativeStart.java:-1)
EDIT:
В ответ на некоторые комментарии, приведенная выше трассировка стека не была сгенерирована из-за исключения. Именно здесь я наткнулся на точку останова, чтобы увидеть историю вызовов, приведших к остановке приложения. Приложение выходит чисто, я пытаюсь понять, почему оно вообще хочет выйти.
ОБНОВЛЕНИЕ: я наконец нашел виновника. Неизменно, прежде чем мое приложение закрывается, я получаю это несколькими моментами раньше в выводе журнала:
I/ActivityManager﹕ START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.google.android.wearable.app/com.google.android.clockwork.home.HomeActivity (has extras)}
Кажется, что перемещение часов увеличивает количество шагов шагомера, что приводит к отображению новой информационной карты на главном экране часов. Эта карточка прерывает мою полноэкранную активность и закрывает ее. Кто-нибудь знает способ предотвратить это? Это похоже на ошибку Wear, я не уверен, что другие приложения должны иметь возможность прерывать работающее приложение переднего плана.
Я нашел причину, по которой мое приложение закрывается, но только из-за удачной информации, отправленной в журнал. Я все еще ищу ответ на свой первоначальный вопрос, общий способ определить причину остановки приложений системой Android. Может быть, это просто невозможно?
at myRandomApp.WearActivity.onStop(WearActivity.java:76)
? - person EpicPandaForce   schedule 04.09.2014super.onStop()
. Мой первоначальный вопрос состоял в том, чтобы найти способ выяснить, ПОЧЕМУ моя деятельность останавливается (чисто). - person Morne   schedule 04.09.2014