Чем служба AccessibilityService отличается от обычной службы в отношении управления памятью системой?
Я спрашиваю: может ли система убить AccessibilityService для экономии памяти, и если да, то когда вы перейдете к настройкам специальных возможностей, вы увидите, что он включен или выключен? Придется ли пользователю снова включать его вручную?
Поможет ли использование startForeground сохранить службу AccessibilityService?
В аналогичном вопросе после перезагрузки мой AccessibilityService не вызывается (onServiceConnected никогда не вызывается). Когда я захожу в настройки специальных возможностей, служба показывает, что она включена. Приходится выключать и включать, чтобы снова заработало. Есть идеи?
Ответ 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() помогает поддерживать его в рабочем состоянии, придавая ему наивысший возможный приоритет.