Странное поведение в реализациях абстрактного Activity - PullRequest
0 голосов
/ 10 февраля 2012

Я столкнулся с довольно странной проблемой.

У меня есть абстрактное Activity, создающее некоторые потоки и обрабатывающее сообщения с помощью обработчика, вызывая абстрактный handleEvent () - метод.

При определенных событиях одно из многих дочерних действий, реализующих эту абстрактную родительскую деятельность, создается с использованием намерений - обычный способ.

Теперь о странной части: каждое из этих дочерних действий реализует и переопределяет метод handleEvent () - абстрактного действия.

Однако handleEvent () - метод в любой дочерней деятельности, кроме первой, никогда не вызывается!

Может кто-нибудь объяснить это поведение?

Пытаясь быть более ясным:

Abstract Parent получает событие-> Create Activity ChildA Аннотация Родитель получает событие -> Создать действие ChildB Аннотация Родитель получает событие -> Создать действие ChildC

Родитель получает событие, которое должен обработать handleEvent () - но вызывается только метод handleEvent для ChildA, даже если ChildB или ChildC является активной Activity.

Любой

1 Ответ

0 голосов
/ 10 февраля 2012

Это происходит потому, что:

Каждый экземпляр обработчика связан с одним потоком, и это очередь сообщений потока

Это означает, что если обработчик создан в одном потоке, сообщения не будут получены в другом. Чтобы преодолеть эту проблему, создайте Handler следующим образом:

Handler yourHandler = new Handler(Looper.getMainLooper());

Это будет связывать Handler с основным (UI) потоком.

...