抽象Activity的实现中的奇怪行为

时间:2012-02-10 09:52:36

标签: android inheritance event-handling thread-safety handler

我遇到了一个相当奇怪的问题。

我有一个抽象的Activity创建一些线程,并通过调用抽象的handleEvent()方法使用Handler处理消息。

在某些事件中,实现此抽象父活动的许多子活动之一是使用意图创建的 - 正常方式。

现在对于奇怪的部分:每个子活动都实现并覆盖抽象活动的handleEvent() - 方法。

然而,handleEvent() - 任何子活动中的方法 - 除了第一个 - 永远不会被调用!

有人可以解释这种行为吗?

试图更清楚:

摘要父母收到事件 - >创建活动ChildA 摘要父母接收事件 - >创建活动ChildB 摘要父母接收事件 - >创建活动ChildC

父接收handleEvent()应该处理的事件 - 但只调用ChildA的handleEvent方法 - 即使ChildB或ChildC是活动的Activity。

任何?

1 个答案:

答案 0 :(得分:0)

这是因为:

  

Each Handler instance is associated with a single thread and that thread's message queue

这意味着如果在一个线程中创建处理程序,则不会在另一个线程中接收消息。要解决此问题,请以这种方式创建Handler

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

这会将Handler与主(UI)线程相关联。