如何在程序中启动和停止AccessibilityService?

10

背景

我的应用程序拥有一个AccessibilityService。Android似乎一直保持 AccessibilityService 运行,但我只需要在某些时候运行该服务。(具体来说,如果用户打开我的应用并关闭它,则不再需要使用 AccessibilityService)。

如果我的 AccessibilityService 没有必要运行时仍在运行,则会浪费设备的RAM和CPU,我希望尽可能避免这样对我的用户造成不必要的麻烦。

问题

如何以编程方式启动和停止我的 AccessibilityService

请注意,我是在询问如何在Android的辅助功能设置中以编程方式启用或禁用 AccessibilityService。这只是关于在已启用服务时如何启动和停止服务的问题。

我尝试过什么(停止 AccessibilityService

相关问题


能否请您分享一个最小化项目,以便我们进行尝试? - android developer
2个回答

9
取自AccessibilityService文档的生命周期部分

辅助功能服务的生命周期完全由系统管理,遵循已建立的服务生命周期。启动辅助功能服务仅由用户在设备设置中显式打开服务触发。系统绑定到服务后,它会调用onServiceConnected()方法。客户端可以重写此方法以执行绑定后设置。

当用户在设备设置中关闭服务或调用disableSelf()(在Android 7.0(API 24)及更高版本中)时,辅助功能服务将停止。


2

正如Sam的回答所述,AccessibilityService的生命周期由系统独占管理,因此您无法杀死它。

但是除了资源优化目的外,如果您仍然需要在某些情况下启动/停止AccessibilityService的操作,则可以简单地使用传统的SharedPreferences

您的服务的onAccessibilityEvent应该是:

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

    if (prefs.getBoolean("isServiceEnabled", true)){
        /*
        * Your code goes here
        */
    }
}

当您想要“开启/关闭”服务时,只需在某个按钮的onClickListener或其他需要的地方写入以下内容即可:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

prefs.edit().putBoolean("isServiceEnabled", false).apply(); // disable

prefs.edit().putBoolean("isServiceEnabled", true).apply();  // enable

一个布尔静态变量会更有效率。 - user1079425
实际上从 API 24 开始,可以这样做:https://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html#disableSelf() - android developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接