Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Следует ли/можно ли использовать startForeground в AccessibilityService?

Автор вопроса: nunofОтветов: 2

Чем служба AccessibilityService отличается от обычной службы в отношении управления памятью системой?

Я спрашиваю: может ли система убить AccessibilityService для экономии памяти, и если да, то когда вы перейдете к настройкам специальных возможностей, вы увидите, что он включен или выключен? Придется ли пользователю снова включать его вручную?

Поможет ли использование startForeground сохранить службу AccessibilityService?

В аналогичном вопросе после перезагрузки мой AccessibilityService не вызывается (onServiceConnected никогда не вызывается). Когда я захожу в настройки специальных возможностей, служба показывает, что она включена. Приходится выключать и включать, чтобы снова заработало. Есть идеи?

androidserviceaccessibilityaccessibilityservice

Ответы

Ответ 1 · рейтинг 7 · alanv

Вам не нужно использовать уведомления переднего плана, чтобы служба AccessibilityService продолжала работать в фоновом режиме. Это частный случай службы.

Фреймворк попытается автоматически перезапустить службу специальных возможностей в случае ее сбоя. Если он вылетает несколько раз, каждый раз перезапуск будет занимать больше времени. Возможно, поэтому кажется, что ваша служба включена, даже если она не запущена.

Ответ 2 · type-a1pha

Посмотрите здесь: http://developer.android.com/guide/components/processes-and-threads.html .

Поскольку AccessibilityService действительно является службой, ее можно убить, как и любую другую службу. Так как это должна быть связанная служба, она продолжает существовать, пока к ней привязана активность. Если ваша активность не отвязывается от нее в onPause() или onStop(), она все равно будет привязана при возобновлении. Это означает, что onServiceConnected() не будет вызываться. Вы по-прежнему можете использовать IBinder, который вы вернули в вызове onBind().

Прочтите также "Дополнительные примечания" здесь: http://developer.android.com/guide/components/bound-services.html#Binding.

Использование etForeground() помогает поддерживать его в рабочем состоянии, придавая ему наивысший возможный приоритет.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы