Я прочитал, что мне следует позвонить
startForegroundService(intent)
, если я хочу правильно запустить службу, которая может работать в качестве службы переднего плана. Но как мне подумать, если я хочу, чтобы это началось, не будучи сервисом переднего плана, но потенциально могло бы стать таковым позже? Немного информации о том, как у нас это сейчас есть:
У нас есть приложение, которое использует сервис для многих задач. Он выполняет все эти задачи, когда пользователь взаимодействует с приложением на переднем плане, но в зависимости от того, активировал ли пользователь определенную функцию, мы хотим продолжать выполнять эти задачи в фоновом режиме. Поэтому, когда приложение запускается (и, очевидно, находится на переднем плане), мы запускаем службу, используя
startService(intent);
Когда приложение переходит в фоновый режим, мы проверяем, включена ли эта функция, и, если это так, запускаем startForeground(id, notificiation);
, который эффективно добавляет несъемные уведомления в ОС, и служба продолжает работать. Когда приложение возвращается на передний план, мы называем stopForeground(true)
. Если эта функция не включена, служба никогда не будет установлена в качестве службы переднего плана, и мы не будем пытаться выполнять эти задачи в фоновом режиме.
Итак, мой вопрос: Достаточно ли этого, чтобы получить "полную производительность обслуживания переднего плана"? Или я что-то теряю, не звоня startForegroundService(intent)
? У меня сложилось впечатление, что у нас действительно есть полностью работающий сервис переднего плана, но я запутываюсь, когда читаю утверждения, которые foreground services must be started using startForegroundService(intent)
мы не делаем. Если нам действительно нужно для использования startForegroundService(intent)
, единственное решение, которое я могу придумать, - это изначально запустить нормальный экземпляр службы, а когда приложение переходит в фоновый режим, мы запускаем новый, используя startForegroundService(intent)
. Но нужно ли нам это делать или выполняется startForegund(id, notification)
на службе, запущенной с использованием startService(intent)
, достаточной для достижения службы переднего плана?
ПРИМЕЧАНИЕ: Я нахожу одно отличие в том, что если При запуске службы само приложение находится в фоновом режиме, тогда мне нужно startForegroundService(intent)
для API> = 26. В нашем случае мы всегда запускаем службу, когда приложение находится на переднем плане. Однако я вспоминаю некоторые случаи, когда я видел исключение, возникающее, когда мы пытаемся запустить службу с использованием startService(intent)
, приложение почему-то (очень и очень редко) все еще думает, что оно работает в фоновом режиме (возможно, что-то из ОС появляется только тогда, когда приложение запущен). Поэтому, если я пойму, когда это произойдет, я смогу запустить startForegroundService(intent)
, чтобы запустить службу. Но возможно ли запустить stopForeground(true)
на этом сервисе, когда приложение вернется на передний план? Или это обязательно будет приоритетным сервисом навсегда, так как мы начали его таким образом?