Смахнул приложение из списка последних, заблокировал телефон, а музыка продолжает играть, навигатор считает маршрут и через минуту приходит сообщение. Легко решить, что программа просто проигнорировала закрытие. На самом деле «приложение видно среди последних», «процесс находится в оперативной памяти», «процессор выполняет его код» и «система разрешила фоновую задачу» означают совершенно разные вещи.
Android и iOS специально не пытаются немедленно убить каждую программу после ухода с экрана. Система может сохранить процесс в оперативной памяти, полностью остановив выполнение его кода, а потом быстро вернуть программу к жизни. Отдельным приложениям разрешают музыку, навигацию, передачу файлов, работу с Bluetooth и другие фоновые сценарии. Поэтому привычка постоянно смахивать все карточки обычно не экономит батарею и не делает смартфон быстрее.
Карточка приложения вообще не показывает, работает ли приложение
Начнем с главной путаницы. Экран последних приложений на Android и переключатель приложений на iPhone не работают как диспетчер задач Windows.
Карточка показывает недавнее состояние интерфейса и позволяет вернуться туда, где пользователь остановился. За карточкой может находиться работающий процесс, замороженный процесс или вообще ничего. Система могла давно выгрузить программу из оперативной памяти, сохранив ее карточку и данные, необходимые для восстановления интерфейса.
| Что видит пользователь | Что может происходить внутри |
|---|---|
| Приложение есть среди последних | Процесс работает, заморожен или уже уничтожен |
| Приложение занимает оперативную память | Код может вообще не выполняться |
| Пришло уведомление | Уведомление могла доставить системная служба без постоянной работы приложения |
| В статистике есть фоновая активность | Программа могла кратковременно просыпаться или выполнять разрешенную фоновую задачу |
| После возврата приложение открылось мгновенно | Система сохранила процесс или быстро восстановила состояние |
Поэтому фраза «у меня открыто двадцать приложений» технически почти бессмысленна. Пользователь видит двадцать карточек, но процессор совсем не обязан одновременно выполнять код двадцати программ.
Оперативная память тоже не должна оставаться пустой. Свободная память сама по себе не ускоряет смартфон. Android и iOS стараются использовать доступную оперативную память для недавно запущенных приложений и системных кэшей. Когда память понадобится новой программе, система освободит ее самостоятельно.
Что происходит на iPhone и Android
У iPhone жизненный цикл приложения хорошо показывает разницу между фоном и настоящей работой. После ухода с экрана приложение переходит из активного состояния в фоновое. Система дает ему немного времени закончить критичные действия, сохранить данные и подготовиться к остановке.
Для обычной программы такой период короткий. Документация Apple указывает, что после перехода в фон приложение обычно получает около пяти секунд на завершение стандартных операций. Разработчик может запросить дополнительное время для конкретной незавершенной задачи, но бесконечную работу такой механизм не дает.
Следующим состоянием становится suspended, по-русски его обычно называют приостановленным. Процесс может оставаться в оперативной памяти, но процессор его код не выполняет. При нехватке памяти iOS вправе выгрузить такой процесс без предупреждения.
Существуют разрешенные исключения. Музыкальный проигрыватель должен продолжать воспроизведение. Навигатору нужны координаты. Приложению для звонков требуется поддерживать разговор. Система также умеет запускать или ненадолго пробуждать программу для предусмотренных платформой фоновых задач.
Функция Background App Refresh, которая в русской локализации обычно называется «Обновление контента», тоже не означает постоянную работу программы. iOS сама решает, когда дать приложению время получить свежие данные. Частота зависит от условий работы системы, режима питания и поведения пользователя.
Android строит жизненный цикл немного иначе, но общий принцип тот же. После ухода приложения с экрана его процесс может перейти в кэшированное состояние. Такой cached process хранится в оперативной памяти ради быстрого возврата, однако разработчикам прямо рекомендуют не рассчитывать на выполнение кода в таком состоянии.
В современной архитектуре Android есть еще один любопытный механизм. Cached apps freezer способен буквально заморозить кэшированный процесс. Потоки перестают получать процессорное время, но содержимое процесса остается в оперативной памяти. В AOSP для Android 14 и новее предусмотрена заморозка кэшированного процесса через 10 секунд после перехода в соответствующее состояние. Конкретное поведение зависит и от реализации производителя смартфона.
Получается довольно красивый компромисс. Программа занимает часть оперативной памяти, зато практически не расходует процессор и быстро возвращается на экран. Убивать такой процесс только ради красивой цифры свободной памяти обычно нет смысла.
Если программе действительно нужно продолжать заметную для пользователя работу, Android предлагает foreground service, службу переднего плана. Такие службы применяют, например, для навигации, воспроизведения музыки, записи тренировки или некоторых длительных передач данных. Android требует показывать пользователю системное уведомление, а новые версии системы жестче ограничивают запуск подобных служб из фона.
Для отложенной синхронизации и других задач разработчики используют системные планировщики вроде WorkManager и JobScheduler. Приложение сообщает, какую работу требуется выполнить, а Android выбирает подходящий момент с учетом сети, питания, ограничений батареи и состояния устройства.
Проверять и менять фоновые процессы стоит только на собственных устройствах или устройствах, которыми вы вправе управлять. Не отключайте корпоративные средства защиты, мониторинга и управления ради эксперимента. Учитывайте правила организации и требования законодательства своей страны, особенно России.
Почему push не доказывает, что Telegram или банк «висел в фоне»
Уведомления дают самый убедительный ложный аргумент в пользу постоянно работающих приложений. Пользователь закрывает мессенджер, через десять минут приходит сообщение и вывод кажется очевидным. Раз уведомление пришло, значит мессенджер десять минут работал.
Не обязательно.
Для доставки уведомлений существуют системные службы Apple Push Notification service и Firebase Cloud Messaging. Сервер мессенджера или банка отправляет сообщение инфраструктуре Apple или Google, а смартфон получает его через системный канал. Самому приложению не требуется держать собственное постоянное сетевое соединение и непрерывно проверять сервер.
На Android обычное уведомление Firebase для приложения в фоне система может сразу отправить в панель уведомлений. Код приложения при таком сценарии не обязан непрерывно выполняться.
На iPhone похожую роль выполняет APNs. Существуют и тихие фоновые уведомления, которые могут ненадолго разбудить приложение и дать время обновить данные. Apple отдельно предупреждает, что доставка таких фоновых сигналов не гарантируется и может ограничиваться системой.
По той же причине Background App Refresh нельзя считать главным выключателем push. Можно запретить обновление контента и продолжить получать обычные уведомления. Внутренние данные приложения при этом могут обновиться позже, когда пользователь откроет программу.
Принудительное закрытие приложения из переключателя тоже отличается от обычного ухода на главный экран. Apple прямо пишет, что после такого закрытия приложение может потерять возможность выполнять часть фоновых действий и проверять новый контент до следующего запуска. Поэтому постоянно смахивать мессенджеры, почту и другие программы без причины я бы не стал.
Что действительно расходует батарею и как найти виновника
Еще одна ловушка находится в статистике аккумулятора. Пользователь открывает настройки, видит возле приложения несколько часов фоновой активности и представляет процессор, который все это время работал на полной мощности.
Такой вывод делать нельзя. Apple относит к фоновой активности навигацию, воспроизведение музыки, синхронизацию фотографий, получение почты и другие операции. Несколько часов возле музыкального проигрывателя вполне нормальны, если столько же времени играла музыка с выключенным экраном.
Сначала я бы смотрел не на сам факт фоновой активности, а на контекст.
- Музыка и подкасты. Длительная работа в фоне ожидаема, иначе воспроизведение остановилось бы после блокировки экрана.
- Навигация. GPS, мобильная сеть и обработка координат способны заметно расходовать батарею даже при выключенном дисплее.
- Фото и облачные диски. После съемки большого количества фото или подключения к Wi-Fi приложение может синхронизировать гигабайты данных.
- Мессенджеры. Большинство обычных push не требует постоянного исполнения программы, но звонки, загрузка файлов и отдельные фоновые операции меняют картину.
- Bluetooth. Фитнес-браслеты, часы, датчики и медицинские устройства могут регулярно обмениваться данными со смартфоном.
- Плохой сигнал. Радиомодем иногда расходует больше энергии, чем подозреваемое приложение. Особенно заметно в метро, лифте, подземном паркинге и зданиях с плохим покрытием.
На iPhone стоит открыть «Настройки», затем «Аккумулятор» и посмотреть подробности конкретного приложения. Метки «На экране», «В фоне» и «Уведомления» помогают отделить обычное использование от подозрительной активности.
На Android названия пунктов зависят от производителя. На близких к стандартному Android устройствах путь обычно проходит через настройки батареи и статистику расхода по приложениям. Для конкретной программы можно проверить разрешенную фоновую работу и при необходимости ограничить ее. Samsung, Xiaomi, HONOR, OPPO и другие производители добавляют собственные режимы энергосбережения, поэтому названия переключателей отличаются.
Сразу включать максимально жесткое ограничение я бы тоже не советовал. После такого «лечения» пользователь часто получает новые проблемы. Почта обновляется с задержкой, фотографии перестают автоматически загружаться, навигация теряет маршрут, часы реже синхронизируются, а некоторые приложения пропускают нужные фоновые задания.
Если Android-смартфон подключен к компьютеру и установлен ADB, технически любопытные пользователи могут посмотреть состояние процессов через системную диагностику.
adb shell dumpsys activity processes
Отчет большой, но хорошо показывает, насколько примитивна модель «карточка есть, значит приложение работает». В списке одновременно встречаются процессы с разными приоритетами и состояниями, а структура вывода зависит от версии Android и прошивки производителя.
Статистику батареи можно получить отдельной командой.
adb shell dumpsys batterystats
ADB здесь нужен скорее для диагностики и обучения. Обычному владельцу смартфона системной статистики батареи хватает почти всегда. Если подозрение связано не с фоновым процессом, а с физическим износом аккумулятора, мы отдельно разбирали, как проверить состояние аккумулятора на Android и iPhone.
Главный миф я бы сформулировал так. Свободная оперативная память не является целью работы смартфона. Пустая память ничего полезного пользователю не дает. Android и iOS стараются сохранить недавно открытые программы именно потому, что восстановить готовый процесс часто выгоднее, чем заново читать данные, создавать интерфейс и запускать приложение с нуля.
Apple в актуальной пользовательской справке прямо указывает, что массовое закрытие всех приложений не улучшает общую производительность iPhone. Android использует кэшированные и замороженные процессы по той же практической причине, чтобы сократить лишнюю работу при повторном запуске.
Поэтому нормальная стратегия скучнее популярных советов из интернета. Не «чистить оперативную память» каждый вечер, а вмешиваться только при реальной проблеме. Если приложение быстро разряжает телефон, использует геолокацию без понятной причины, постоянно передает данные или ведет себя нестабильно, стоит проверить разрешения, статистику батареи и фоновые настройки. Если смартфон работает нормально, система управления процессами почти наверняка справится лучше ручного ритуала со смахиванием двадцати карточек.
Работает ли приложение, если оно осталось в списке последних?
Не обязательно. Карточка последних приложений показывает возможность вернуться к программе, а не текущее состояние процесса. Процесс может работать, быть замороженным или уже отсутствовать в оперативной памяти.
Нужно ли постоянно закрывать приложения на iPhone?
Нет. Apple не рекомендует массово закрывать приложения ради ускорения смартфона или экономии батареи. Принудительное закрытие полезно прежде всего для зависшей или неправильно работающей программы.
Почему приложение присылает уведомления после закрытия?
Обычные push-уведомления доставляют системные службы Apple и Google. Самому приложению не требуется постоянно держать процесс активным и поддерживать собственное сетевое соединение.
Расходует ли приложение батарею, пока находится в оперативной памяти?
Сам факт нахождения процесса в оперативной памяти почти ничего не говорит о расходе энергии. Приостановленный или замороженный процесс может занимать память и при этом не получать процессорного времени.
Что значит фоновая активность на iPhone?
Так iOS обозначает работу приложения, когда оно не находилось на экране. Причиной может быть музыка, навигация, синхронизация фотографий, получение почты и другие разрешенные системой задачи.
Что произойдет, если запретить приложению работу в фоне?
Расход энергии иногда уменьшится, но часть функций может работать хуже. Возможны задержки синхронизации, загрузки файлов, обновления данных, геолокации и других фоновых операций. Обычные push-уведомления зависят от отдельного системного механизма.
Почему музыка продолжает играть после закрытия приложения?
Воспроизведение мультимедиа относится к специально разрешенным фоновым сценариям. iOS и Android позволяют проигрывателю продолжить работу после ухода пользователя с его основного экрана.
Когда приложение действительно стоит принудительно закрыть?
Принудительное закрытие оправдано, если программа зависла, перестала правильно реагировать, явно продолжает ненужную задачу или после сбоя расходует необычно много ресурсов. Делать такую процедуру регулярно со всеми приложениями смысла нет.