Активность onPause не возвращается к onResume

В моем приложении Google Glass я работаю с CardScrollView.

Как и в случае с основной временной шкалой, через десять секунд экран отключается, и активность переходит в onPause().

Однако, когда я нажимаю на Google Glass, я не вижу свою активность, я вижу домашнюю карту (часы), и если я снова начну свою деятельность (с помощью «хорошо, стекло + моя голосовая команда), активность начнется снова (она создана ) Я думаю, что предыдущая активность должна вызывать onResume(), а этого не происходит.

Итак... есть идеи, как я могу вернуться к onResume этой деятельности??

Большое спасибо!


person Bae    schedule 29.04.2014    source источник


Ответы (3)


Я не вижу такого же поведения.

Если я создам простое приложение, которое просто отображает события жизненного цикла активности в текстовом представлении, запускаемом либо намерением запуска, либо голосовым триггером, я вижу:

onCreate onStart onResume

когда приложение запускается

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

onPause (это было раньше, но я вижу это сейчас) onStop (то же самое, было раньше) onRestart onStart onResume

Итак, вызывается onResume.

Итак, я думаю, что ответ на ваш вопрос: onResume действительно вызывается, когда приложение переходит в спящий режим, и вскоре после этого вызывается снова. Если вы видите по-другому, мое единственное предположение состоит в том, что он тихо падает или, возможно, использует так много ресурсов, что Glass его убивает. Вы можете узнать больше, добавив в свой код несколько операторов стратегического журнала. Если происходит сбой при паузе или остановке, исправление сбоя решит вашу проблему. Если вы поделитесь своим кодом активности, я могу попытаться помочь больше.

Более сложное решение для большего контроля над длительным опытом для вашего пользователя — настроить живую карту со службой. Документация для этого немного сбивает с толку: https://developers.google.com/glass/develop/gdk/live-cards, поэтому вы можете просто использовать приведенный ниже код в качестве примера.

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

https://github.com/mscheel/GoogleGlass-XE16-LowFrequencyLiveCardBasketballScore

person Mark Scheel    schedule 30.04.2014
comment
Привет! Смотрите мой собственный ответ. Проблема заключалась в том, что мне пришлось добавить android:immersive="true" в свои действия в манифесте. Мне нужен захватывающий опыт, поэтому мне не нужно использовать LiveCard. Спасибо за Ваш ответ! - person Bae; 30.04.2014
comment
Вы уверены, что если вы создадите базовое действие, подождите десять секунд, пока экран не выключится, и коснетесь стекла, вы продолжите то же действие? Я сделал это, и я вижу карту часов, когда постукиваю по стеклу. Я не знаю почему, но android:immersive=true сработало дважды, а потом не сработало. Я использую XE16.11. - person Bae; 30.04.2014
comment
Да, я уверен. Это работает для основной деятельности и живой карты. - person Mark Scheel; 01.05.2014

Возможно, ваша активность получает GCd (сбор мусора), чтобы освободить память после ее приостановки. Вы можете исследовать это, выводя в Log in onDestroy, если вы видите сообщение журнала, вы знаете, что оно было уничтожено, и тогда имеет огромный смысл, что оно воссоздано.

person straya    schedule 30.04.2014
comment
Привет! Смотрите мой собственный ответ. Проблема заключалась в том, что мне пришлось добавить android:immersive="true" в свои действия в манифесте. Спасибо за Ваш ответ! - person Bae; 30.04.2014

Я читал, что когда вы используете иммерсивный шаблон, когда экран выключен, если вы нажимаете и активируете экран, вы продолжаете видеть свою активность. Ну для этого нужно добавить android:immersive="true" в свои активности в манифесте.

Когда экран выключен, андроид вызывает onPause() и onStop. Когда вы нажимаете, андроид вызывает onRestart() и onStart()

person Bae    schedule 30.04.2014