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

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

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

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

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


person nunof    schedule 18.07.2013    source источник


Ответы (2)


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

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

person alanv    schedule 21.08.2013

Посмотрите здесь: 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() помогает поддерживать его в рабочем состоянии, придавая ему наивысший возможный приоритет.

person type-a1pha    schedule 19.07.2013
comment
Действия не должны связываться напрямую с AccessibilityServices, и, начиная с API 16, им запрещено это делать с помощью разрешения. Фреймворк автоматически привязывается к службам AccessibilityServices, когда они включены, и поэтому нет необходимости в setForeground(). - person alanv; 21.08.2013