android 如何最好地使用 AccessibilityServiceInfo (AccessibilityService) 中的 packageNames

How to the best using for packageNames in AccessibilityServiceInfo (AccessibilityService) in android

我是新会员

我发现过滤 AccessibilityService 的方法是 packageNames 使用 getServiceInfo 和 setServiceInfo。

我想过滤所有 Active 包以了解打开了哪些应用程序。这意味着列表中可能有大约 50 150 个包。

你能帮我找到 CPU 的最佳案例,节省资源(哪个更好?)1/ 保留默认 packageNames 为 null 并在 onAccessibilityEvent 中过滤 2/ set packageNames 是 list 50 150 packages

PS:当我保持默认时,会发生很多事件......所以害怕它吃掉很多电池

谢谢

无论您是否添加包名称,这些事件都会发生。如果您深入研究 Android 开源代码,您会发现构建发生在 "drain battery" 的这些事件的大部分步骤都会发生,无论您是否过滤它们。过滤是为了您的方便,这样您就不会最终在 Java 中过滤它们作为 onAccessibilityEvent 方法的第一步。做对您的应用程序和用例最有意义的事情,它对性能的影响最小,除非,您的用于类似目的的 Java 过滤功能被破坏。

节省 CPU 的最佳案例是让您尽可能高效地处理您关心的事件,并且不对这些事件进行昂贵的操作。

其次,是让尽可能少的事件进入您的业务逻辑以服务于您的用例。但是,您如何过滤这些事件是无关紧要的。如果您保留此配置默认值,请通过 Java 代码将其过滤掉。如果您可以通过设置服务配置允许的一些过滤器(程序包过滤器、限制等)来完成所有过滤,那就去做吧。或者两种方法的组合。但是,一种方法相对于另一种方法的性能优势很小甚至为零。

总体:喜欢干净的代码并且只处理您关心的事件。特别是 throttling/filtering 尽可能多的滚动和屏幕变化相关事件。然而,过度思考这种过滤是如何发生的是浪费时间。