2011-01-25 2 views
5

Есть ли способ узнать, возобновляется ли действие (например, onResume) из главного экрана/запуска?Есть ли способ отличить Android Activity onResume от главного экрана?

Например, если у меня есть приложение с двумя видами деятельности, A и B.

Сценарий 1: Некоторые действия пользователя на активность A будет вызывать активность B, в результате чего его на передний план - двигательную активность A в фоновом режиме. Когда активность A перемещается в фоновый режим, она проходит через onPause() и onStop(). Пользователь (теперь на Activity B) либо завершает Activity, либо нажимает кнопку «назад», возвращая Activity A на передний план, вызывая последовательность onRestart(), onStart(), onResume().

Сценарий 2: Если пользователь нажимает кнопку «домой», а активность А на переднем плане, а затем повторно запускает приложения из пусковой установки, она проходит через тот же жизненный цикл, как и в сценарии 1. Т.е. Пользователь нажимает кнопку «домой». Активность проходит через onPause() и onStop(). Пользователь снова запускает приложение, заставляя Activity A вернуться на передний план, снова просматривая ту же последовательность onRestart(), onStart(), onResume(), что и в Сценарии 1.

Насколько я могу судить, Деятельность не имеет никакого способа узнать, как она была возобновлена, она просто знает, что она возвращается в поле зрения. На самом деле, я чувствую, что на самом деле нет понятия «приложение» в Android - в смысле чего-то, что имеет одну точку входа и выхода.

+1

Зачем вам это нужно? – Macarse

+0

Ах. На самом деле, я пытаюсь отслеживать количество запусков приложений - но пока не нашел способа различать разные сценарии onRestart(). –

+0

Имейте в виду, что есть другие случаи, когда активность будет возобновлена, помимо использования кнопки «домой». Это новый запуск приложения, когда пользователь получает телефонный звонок, система убивает ваше приложение, а затем возобновляет его? Я думаю, будет лучше отслеживать взаимодействия в вашем приложении, а не «запуск», однако это определено. – sargas

ответ

2

В Сценарии 2 ваша деятельность получит звонок onNewIntent, с которым намерение запускается.

+0

Согласно документам, onNewIntent вызывается только для определенных режимов запуска - «singleTask» и «singleTop».Мне только удалось заставить его работать для «singleTask», однако документы не рекомендуют этот режим запуска. –

+0

Этот подход, похоже, работает нормально для меня. Мне нужно отметить «пункт входа» как «singleTask», tho '. Благодаря! –

2

Вы можете захватить кнопку «Назад», нажав на действие «В», и передать дополнительное значение в «Активность». Если есть дополнительное значение, действие возобновилось после нажатия на действие «В», если нет дополнительного значения, тогда действие был возобновлен из-за того, что он скрыт.

+0

У меня возникло чувство, что мне нужно будет обрабатывать оба случая (активность B возвращается с результатом * и * «Пользователь нажимает кнопку« Назад »в действии B). –

1

Возможно ли использовать функцию startActivityForResult() для начала действия B и использовать onActivityResult() для определения того, что действие B закончено?

+0

Я предполагаю, что onActivityResult() возникнет после завершения всех остальных обратных вызовов? Я прокомментировал выше, я действительно заинтересован в подсчете запусков приложений, поэтому я подключался к onStart() и onResume(). Я видел другие ответы, предлагающие onCreate(), но которые не срабатывают при запуске с «home» screen. Я мог бы уменьшить счетчик, если что-то вернется из onActivityResult(), но это кажется kludgy - возможно, неизбежным? –

Смежные вопросы