2012-02-10 17 views
0

我遇到了一個相當奇怪的問題。抽象活動實現中的奇怪行爲

我有一個抽象的活動創建一些線程,並通過調用一個抽象handleEvent()方法處理消息使用Handler。

在某些事件中,實現此抽象父活動的許多子活動中的一個是使用意圖創建的 - 正常方式。

現在對於奇怪的部分:這些子活動中的每一個都實現並覆蓋抽象活動的handleEvent()方法。

但是,任何子活動(除第一個之外)中的handleEvent()方法都不會被調用!

有人可以解釋這種行爲嗎?

試圖更清晰:

抽象父接收事件 - >創建活動ChildA 抽象父接收事件 - >創建活動ChildB 抽象父接收事件 - >創建活動ChildC

父接收事件該handleEvent()應該處理 - 但只有ChildA的handleEvent方法被調用 - 即使ChildB或ChildC是活動的Activity。

有人嗎?

回答

0

這是因爲:

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

這意味着,如果一個線程被創建的處理程序中的消息將不被對方收到。爲了克服這個問題,創建Handler這樣:

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

這將主(UI)線程Handler關聯。

+0

處理程序位於抽象(父級)活動中。處理程序收到所有消息就好了。但是當調用在不同的子活動中實現的handleEvent()方法時,只有一個handleEvent()方法被執行 - 第一個孩子。我期望所有子活動中的所有handleEvent()方法都能被執行。 – DKIT 2012-02-10 11:00:26

+0

然後你應該提供一些代碼 - 從你的問題中你不清楚你如何開始活動,什麼是你的班級等級。 – 2012-02-10 11:13:37