В документах говорится о onRestart< /strong> (выделено мной):
Вызывается после onStop(), когда текущее действие повторно отображается пользователю (пользователь вернулся к нему). За ним следует onStart(), а затем onResume().
Теперь в моем приложении, как и рекомендуется, я (пытаюсь) подключиться к «Клиенту Google API» в onStart и отключиться в onStop следующим образом: (упрощенно)...
@Override
public void onStart(){
super.onStart();
mGoogleAPIClient.connect();
}
@Override
public void onStop(){
super.onStop();
mGoogleAPIClient.disconnect();
}
Я случайно запустил свое приложение и сразу же нажал кнопку «домой», чтобы избавиться от него, оно перешло в фоновый режим, а затем через несколько секунд снова ожило и начало пытаться подключить googleAPIClient. Это происходило только в том случае, если домашняя клавиша (или клавиша обзора, если на то пошло) была нажата быстро, т. е. до того, как появился диалог подключения (или, другими словами, до того, как был вызван mGoogleApiClient.connect()).
При дальнейшем тестировании стало очевидно, что если я удалю mGoogleAPIClient.connect() из onStart, он останется в фоновом режиме, как и ожидалось/требовалось. Я также подтвердил, что когда это происходит, вызывается onRestart, и действительно, он вызывается до вызова onStart. Однако это не имеет для меня никакого смысла.
Если проблема вызвана тем, что mGoogleAPIClient пытается подключиться (и при этом возвращает активность на передний план), а mGoogleAPIClient.connect() вызывается в onStart, который называется после onRestart, как onRestart может быть вызвано, если событие не произошло в этот момент?
Я также подтверждаю, что пробовал как минимум 2 других приложения из Play Store, которые также демонстрируют такое поведение.
Это проблема, которая может легко возникнуть, так как слишком легко запустить что-то по ошибке, а затем сразу же отправить в фоновый режим, поэтому я реализовал обходной путь, используя логические флаги, и теперь проблема возникает только в том случае, если вы запускаете, нажимаете домой/ просмотреть и немедленно перезапустить и снова запустить приложение в фоновом режиме (все до появления диалога). Я не ожидаю, что кто-то сделает это, но мне интересно, является ли это ошибкой, я делаю что-то неправильно или что-то неправильно понимаю, и как мне остановить это нежелательное поведение?
before the connecting dialogue had a chance to appear
что за диалог подключения? - person natario   schedule 29.04.2017onStart
, который запускает диалог. Когда диалог готов,onRestart
иonStart
вызываются снова, но connect() в этот момент бесполезен. - person natario   schedule 29.04.2017