Фон
У меня есть приложение с AccessibilityService. Android, похоже, постоянно держит AccessibilityService, но мне нужно только для запуска. (В частности, если пользователь открывает мое приложение и отключает его, AccessibilityService больше не требуется.)
Если мой AccessibilityService работает, когда он не нужен, он расточает RAM и процессор устройства, и я хочу избежать сделав это для моих пользователей, если это возможно.
Вопрос
Как я могу программно запустить и остановить мой AccessibilityService?
Обратите внимание, что я не запрашиваю программно включить или отключить AccessibilityService в настройках доступности Android; это только начало и остановка, когда она уже включена.
То, что я пробовал (остановка AccessibilityService)
-
Отключить компонент
AccessibilityService, используя следующее:PackageManager.setComponentEnabledSetting( accessibilityServiceName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0 );Это убило все приложение, включая
AccessibilityService. Кроме того, после перезагрузки телефонаAccessibilityServiceбольше не отображается в настройках доступности Android. (Кажется, что компонент необходимо повторно включить, а затем перезапустить телефон, чтобы он снова появился.) -
Отключить компонент
AccessibilityService, используя следующее:PackageManager.setComponentEnabledSetting( accessibilityServiceName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP );Это не остановило
AccessibilityService. -
Остановка
AccessibilityServiceс помощьюContext.stopService()иService.stopSelf(). Это не остановило службу, предположительно поскольку ОС привязана к ней. -
Убив
AccessibilityServiceс помощьюProcess.killProcess(). Однако служба была вскоре перезапущена и снова подключена, предположительно, потому что ОС привязана к ней. -
Отмена регистрации событий доступности с помощью
AccessibilityService.setServiceInfo(new AccessibilityServiceInfo()). Это останавливает обслуживание от получения событий доступности, но служба по-прежнему работает в фоновом режиме.
Связанные вопросы
-
Можно ли остановить или убить службу доступности?
Это только остановка службы. Я хочу иметь возможность запустить службу снова, как только она остановится.