Сейчас Android 15 активно появляется у пользователей. И, как мне кажется, одна его особенность для многих могла остаться незамеченной и даже в документации в описании behavior changes она в конце, а в Features and Changes list и вовсе не упомянута.
Конкретно эта:

О чем речь: если приложение в фоне, то теперь не получится сделать сетевой запрос вне WorkManager или Foreground Service, иначе запрос упадет с UnknownHostException. Я проверил на своем устройстве с недавно прилетевшим Android 15 и выставленным targetSdk = 35 и это действительно так.
До сих пор можно было оправлять запросы (например метрики) в фоновом потоке до тех пор, пока приложение не будет прибито системой.
Вместо конкретного события жизненного цикла, когда это ограничение наступает, в описании фигурирует “valid process lifecycle”. Я проверил в демо-приложении, в какой момент запросы начнут падать. Результаты внезапные: строгой связи с событиями ЖЦ не обнаружил. Запросы начинают обрезаться примерно через 5 сек. после вызова Activity.onStop() при сворачивании Activity. Чуть раньше - запросы еще работают.

Вопрос довольно срочный ‑ поднимать target API level до Android 15 нужно будет уже в этом году. Google пока не обозначил дату, но, судя по предыдущим годам, это август или ноябрь 2025. На этом сайте написано про август.
P. S. Думаю, изменение правильное: нечего грузить девайс и сеть, если приложение сейчас не используется. Плохо, что оно вводится так поздно, когда уже написаны тысячи приложений, которые раньше это не учитывали и которые теперь придется дорабатывать.
P. S.2 Да, редкий случай, когда код намеренно написан так, чтобы выполнялись сетевые запросы в фоне, пока пользователь свернул приложение. Но во многих проектах могут быть места, где запросы исполняются без привязки к ЖЦ отложенно или периодически; по задумке или по ошибке. Также подобные места могут быть в сторонних подключенных SDK. Вы можете проверить это, например, с помощью Android Studio: View → Tool Windows → App Inspection → Network Inspector
Комментарии (23)
Oeaoo
26.06.2025 16:15P. S. Думаю, изменение правильное: нечего грузить девайс и сеть, если приложение сейчас не используется.
Это да, но UnknownHostException - это странное решение. Поленились кинуть специфический ексепшн, теперь клиентский код не может отличить этот кейс от остальных сетевых проблем. Ну, не знаю.
mmarashan Автор
26.06.2025 16:15Соглашусь. Предположу, что могли сделать для обратной совместимости, чтобы не посыпались приложения, в которых обработаны конкретные сетевые Exception-ы, а иначе - краш
Oeaoo
26.06.2025 16:15Ну решается по идее просто - `public class SomeNewNetworkException extends IOException {...}` и все фоновые обработчики выхватят `IOException` что вполне себе нормально. Просто в таком случае разрабы увидят в логах именно `SomeNewNetworkException` и подправят реализацию. А с их решением проблема мимикрирует под другие, что как-бы так себе дизайн.
lsillarionov
26.06.2025 16:15Там не UnknownHostException, а "Typically, an
UnknownHostException
or other socket-relatedIOException
".
Сеть, судя по всему, просто на другом уровне отключается.Oeaoo
26.06.2025 16:15Ну да, но все равно путает. Сеть, хост, стек ведь может быть в порядке. Просто "нельзя".
durka
26.06.2025 16:15Вообще-то если ваше приложение должно работать c сетью в фоне, оно должно это делать не через активность, а с помощью службы.
Для чего её нужно зарегистрировать в манифесте:<service android:name=".NetworkService" android:exported="false" android:enabled="true" android:foregroundServiceType="dataSync" />
protected void StartService() { Intent serviceIntent = new Intent(this, NetworkService.class); // Запуск службы в фоновом режиме, startForegroundService(serviceIntent); } protected void BindService() { // Создание Intent для привязки службы Intent serviceIntent = new Intent(this, NetworkService.class); // Привязка к NetworkService Log.i(TAG, "try bindService..."); boolean bindResult = bindService(serviceIntent, m_Connection, Context.BIND_AUTO_CREATE); Log.i(TAG, "bindService result: " + bindResult); }
oldzoomer
26.06.2025 16:15Собственно, в вебоси (LG webOS) давно именно так. И YouTube, и Кинопоиск, и другие сервисы, где есть функция "включить видео со смартфона" именно так и работают.
mmarashan Автор
26.06.2025 16:15Никто не утверждал, что с сетью нужно работать "через активность". Думаю всем с мало-мальским опытом понятно как правильно. Тут речь о том, что есть смысл проверить места, где запросы в фоне летят почему-то вне WorkManager или Foreground Service и поправить
aamonster
26.06.2025 16:15Т.е. приложения, которые раньше могли работать нестабильно, перестанут работать совсем (и будут починены автором, если повезёт?)
pavel_shabalin
26.06.2025 16:15К комментариям выше
При беглом взгляде кажется, что:
UnknownHostException вместо SomeNewNetworkException - это просто сайд-эффект более глубокого ограничения Activity для работы с сетью.
Jack007
26.06.2025 16:15После обновления до 15 Android смартфон перестал в фоне воспроизводить Интернет радио через ~20 сек после гашения экрана. Проверено на нескольких приложениях, тема активно обсуждалась пользователями на 4PDA - решения так и не найдено, кроме отката на 14 -13 Android...
domix32
26.06.2025 16:15У меня по тому же принципу уведомления из мессенджеров перестают приходить. Тебе вроде написали, но узнаешь ты это только включив дисплей на посмотреть время. Странно это всё.
Jack007
26.06.2025 16:15Не, подобная фишка у меня работает. Может - потому, что сообщения дублируются на смарт-часы Huawey, соответствующее приложение которых работает на телефоне. Но почему я радио ни на одном приложении теперь не могу слушать в дороге, как раньше???
gonzazoid
Хм. То есть слушать музыку с фоновым приложением онлайн нельзя будет не только на ютубе но и вообще нигде?
Aquahawk
revanced решает эту проблему
dartraiden
Можно, если разработчик приложения реализовал это как полагается. Ниже в комментах есть пример того, как надо.
Zulu0
Думаешь vk проплатила гуглу за эту правку?
gonzazoid
Да не, я с точки зрения пользователя размышлял. У меня небольшой проект есть, в профиле можно посмотреть статьи, там у пользователей один из самых частых запросов сделать ютуб играющим на фоне. Вот я от этой новости и подумал - стоит ли заморачиваться и разматывать или сразу не шмогла сделать. Но, как уже подсказали, паниковать рано, продолжаем работать.
AndyLem
Ютюб прекрасно играет на фоне
gonzazoid
На мобиле в браузере и без премиума?
qeeveex
Да. В firefox все работает. Если есть какие-то проблемы, то там же есть плагин для ютуба.
gonzazoid
Эммм. Я в общем то про хромиум говорил но ок, согласен, из обсуждения это было не очевидно.