Экран блокировки телефона Android приводит к нескольким последующим событиям onPause / onResume

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

Мое приложение извлекает данные о местоположении во время работы, и я собирался реализовать способ сохранить батарею, остановив обновление местоположения при вызове onPause, а затем возобновить выборку, когда вызывается событие onResume.

Во время отладки я заметил это странное поведение при блокировке телефона, onPause-> onResume вызываются один за другим три или более раз, а затем заканчиваются событием onStop. Единственный ответ, с которым я мог найти, был следующим: вот как работает андроид, неважно.

Наверное, мне любопытно, может кто-нибудь объяснить мне необходимость остановиться и возобновить простую суб-активность несколько раз? Разве это не потребляет больше батареи, особенно для более крупных действий, имеющих серьезный код в onResume? Есть ли способ предотвратить это? Я был бы счастлив, зная, что хотя бы мой код в этих событиях не вызван, возможно, с блоком if {}, предотвращающим ненужные циклы ЦП.

Любое понимание очень ценится!

Solutions Collecting From Web of "Экран блокировки телефона Android приводит к нескольким последующим событиям onPause / onResume"

Вам необходимо зарегистрировать широковещательный приемник для обработки событий «Screen Time Out» и «Screen Lock».

Вы просто прекратите получение данных. Образец кода:

public class ScreenReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { //screen locked, do here } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { //screen unlocked, do something here } } } 

Вам необходимо зарегистрировать широковещательный приемник для этого класса ScreenReceiver для androidMenifest.xml

Недавно я столкнулся с той же проблемой и смог остановить ее, играя с изменениями Config для активности в файле манифеста. Я считаю, что когда пользователь блокирует устройство, может случиться несколько вещей: ориентация может измениться, размер экрана может измениться (если исчезнут панель навигации или уведомлений) и т. Д., И это заставит Android перестроить все действия и фрагменты. Я закончил тем, что выбрал много вариантов в настройках Config, и он прекратил вызывать onResume после onPause.