Комментарии 19
Мне очень интересно, возможно ли сейчас для Android написать надёжный, но при этом не-системный будильник?
Как я смотрю, все текущие API планирования не гарантируют запуск задачи, а только дают некоторую вероятность, что она будет запущена.
Нет ли какого-нибудь API будильников? Могли бы уж сделать, пусть даже с дополнительным запросом прав или обязательством показать какую-то Activity как результат работы задачи.
И чем были плохи foreground services?
Подозреваю, сервис - это то, что запущено продолжительное время и зависит от user input (запись файла на диктофон), чтобы закончиться, а job - это то, что уже пользователь запустил, но оно завершится само (загрузка файла типичный пример).
Показывает уведомление на несколько секунд, что отвлекает
у джобы будет около минуты на выполнение своих функцийУ меня в foreground services создаётся окно (по типу плавающей кнопки), которое висит «вечно», пока сам не остановлю сервис. Теперь всем таким приложениям хана?
Сам ForegroundService никто не запрещает, пока что. Запрещают запускать его из бекграунда
Вот почему мне, разработчику фитнес-трекера, после каждого обновления Андроида очень хочется нецензурно ругаться.
Хм, много раз слышал, что в сторонних прошивках регулируется автозапуск приложения, даже видел это в оболочках мелких производителей. Если запретить автозапуск и "смахнуть" приложение, оно не будет работать в фоне.
То, которое надо чтобы работало, чаще всего достаточно добавить в исключения энергосбережения. Если приложение вообще умеет работать в фоне и рассчитано на это. Ну и с Android 12 не знаю что случится, не пробовал.
Добавить в исключения энергосбережения недостаточно. Даже взял телефон специально с 6Gb оперативки. Как не посмотрю свободно больше половины, но приложения все равно иногда выгружаются. Раз в неделю где-то, но это будильник. LineageOS. Есть отдельный телефон которым не пользуюсь Unihertz Pro, можно было бы туда поставить, но нет, он выгружает просто все и всегда, правда понятно почему так сделали для этого телефона. Но зачем тогда эта настройка исключений — не понятно.
Так вроде же в доке написано что можно:
https://developer.android.com/about/versions/12/foreground-services#cases-fgs-background-starts-allowed
Your app uses the Companion Device Manager and declares the REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND
permission or the REQUEST_COMPANION_RUN_IN_BACKGROUND
permission. Whenever possible, use REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND
.
Для приложения, которое пишет трек передвижения юзера в фоне, WorkManager не подходит, тут нужен именно сервис, в котором разворачивается LocationManager и обрабатываются обновления локации. И вот у меня есть кейс, когда нужно запустить на смартфоне запись трека командой с приложения-компаньена с Wear OS девайса. Получается теперь Foreground Service не получится запустить, если приложение на смартфоне в бекграунде?
Увлекательно. Благодарю.
Работа с фоновыми задачами в Android 12: переезжаем с foreground service на expedited jobs