Pull to refresh

Comments 11

Почему управление фоновыми задачами нельзя получить пользователю? Чтобы он сам прозрачно мог устанавливать, может ли приложение работать в фоне, использовать автозагрузку, фоновое обновление и прочее?

Потому что в популярных ОС пользователь принимается за дурачка, и не без причин.
Статья не об этом. Она о том, чтобы эти фоновые задачи в принципе работали, если даже пользователя спросили и он согласился.
Потому что если вы пишете, скажем, мессенджер, то пользователи будут массово, по совету знакомого, запрещать вашему приложению фоновую работу «чтобы батарейку не ело», а потом говорить, что ваш мессенджер отстой, потому что не принимает сообщения пока не откроешь. И это будет не их проблема, а ваша.
Не все мессенджеры одинаково полезные. Сам не вникал, но краем уха слышал, что фэйсбук батарейку высаживает.
Но меня больше не месенджеры волнуют, а всякие приложения для заказа пицц и похожие. Я не хочу, чтобы они в фоне работали. Вообще не хочу.
Как вы реализуете обработку ошибок? Ее же нужно как-то показать пользователю.

Хороший вопрос. В каких-то случаях у нас есть своя LiveData, которая висит на Appplication, через которую пробрасываются статусы прямо из Worker; в каких-то случаях это менеджеры самописные; бывает мы слушаем результат выполнения Worker через WorkManager.getInstance().getWorkInfoByIdLiveData()

Не так давно модернизировал свое приложение в связи с введением Background Execution Limits, тоже столкнулся с нехваткой универсальных решений для создания планировщиков. В моем случае нужен был планировщик для автоматической отправки sms сообщений в заданное время.
В результате пришел к следующему решению. Для запуска процедуры отправки и перепланирования в заданное время использую AlarmManager c setExactAndAllowWhileIdle или setExact в зависимости от версии Android. А для самого исполнения задачи использую JobIntentService.
Таким образом, получаем простое решение, не завязанное на версию Android или внешние библиотеки и сервисы, которое просто работает. Может кому-то пригодится.
Пришли к тому же решению. Пока работает, но есть и исключения: Xiaomi OneNote — на них есть настройка ограничения фонового режима и там хоть ты тресни, пока пользователь не снимет ограничение, нукуда ты не пойдёшь…
Есть у нас странная задача — переодически общаться с BLE устройствами. Сделали на WorkManager с запуском раз в час (это отдельная тема) и получили практически БОЛТ. Спустя сутки или даже ранее (в зависимости от производителя и видимо настройки ОС) похоже что процесс вносится в некий blacklist и пока не откроешь UI — тебя больше не запустят.
Как быть пока ХЗ. Вешать ForegroundService с уведомлением в шторку…

Задач с такой частой периодичностью у нас нет, поэтому с такой проблемой пока не столкнулись. Вообще, странно, что через AlarmManager он работает как надо, а через WorkManager нет. Возможно, были какие-то баги (alpha все-таки) и в beta поправили? Багов связанных с периодическими задачами у них в issuetracker было достаточно)

Sign up to leave a comment.