android - 将辅助功能事件传递给后台线程获取空值

标签 android android-asynctask nullpointerexception accessibilityservice accessibility

试试玩安卓AccessibilityService , 路过 AccessibilityEvent到 AsyncTask,但所有值都在 AccessibilityEvent 中消失,例如 mEventTime 变为 0,mPackageName 变为 null 等。无法理解这里发生了什么

public class MyAccessibilityService extends AccessibilityService {

public void onAccessibilityEvent(AccessibilityEvent event) {
    new MyTestAsync().execute(event); //event not null 
}

 public class MyTestAsync extends AsyncTask<Object, Void, Void> {

        private AccessibilityEvent event;

        @Override
        protected ArrayList<AccessibilityNodeInfo> doInBackground(Object... params) {
               this.event = (AccessibilityEvent) params[0]; //getting null values in event  like mEventTime = 0, mPackageName = null
}
}

捕获以下类型的事件

android:accessibilityEventTypes="typeWindowStateChanged|typeViewFocused|typeWindowContentChanged"

最佳答案

事件对象可由操作系统重用。接收者不拥有它。操作系统不会不断地创建新事件。事实上,在正常情况下它只创建很少的可重用(甚至可能只有 1 个)。通过在后台线程中处理事件,事件对象中的值在您开始处理它们时完全无效。你很幸运,它们都是空的,而不是随机的东西,这会让你相信这种方法是伪工作。

解决方案:创建您自己的事件包装器,从您需要的事件中复制值,然后将其传递给您的 AsyncTask。

关于android - 将辅助功能事件传递给后台线程获取空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50464753/

相关文章:

java - Google Glass Live Card 菜单操作导致崩溃

c# - Xamarin 缺少引用

android - AccountManager - authToken 已设置但 peekAuthToken 返回 null

android - 如何在 Universal Image Loader 中设置自定义下载器?

java - 无法从 AsyncTask 启动 WebView

android - 保留 android.support.v4 后,使用 proguard 在 android.support.v4 处出现 nullPointerException

java - 安卓 : How to save data (Intent's Data)

android - 来自 AsyncTask 和 Activity 的数据库访问 - 锁定。解决方案?

android - 异步任务返回结果

android - 启动时 PreferenceManager.getDefaultSharedPreferences 出现 NullPointerException