Передача события доступности для backthread становится нулевым - PullRequest
0 голосов
/ 22 мая 2018

Попробуйте поиграть с Android AccessibilityService , Передача AccessibilityEvent в AsyncTask, но все значения исчезли в AccessibilityEvent, например, mEventTime становится 0, mPackageName становится нулевым и т. Д. Невозможно понять, что здесь происходит

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 Ответ

0 голосов
/ 26 мая 2018

Объект Event повторно используется ОС.Получатель не владеет им.Операционная система не создает новые события постоянно.На самом деле, при нормальных обстоятельствах он создает очень мало повторно используемых (возможно, даже только 1).Выполняя работу над событием в фоновом потоке, значения в объекте события полностью становятся недействительными к тому времени, когда вы приступаете к работе над ними.Вам повезло, что все они нулевые, а не случайные, что заставило бы вас поверить, что этот подход псевдо работает.

Решение: создайте свою собственную оболочку событий, копируя значения из события, которое вам нужнои передайте это вашей AsyncTask.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...