2012-02-10 12 views
0

私はかなり奇妙な問題に遭遇しました。抽象的なアクティビティの実装における奇妙な動作

抽象的なhandleEvent()メソッドを呼び出すことによって、いくつかのスレッドを作成し、ハンドラを使用してメッセージを処理するabstractアクティビティがあります。

特定のイベントでは、この抽象親アクティビティを実装する多くの子アクティビティの1つが、インテント(通常の方法)を使用して作成されます。

これらの子アクティビティのそれぞれは、抽象アクティビティのhandleEvent()メソッドを実装してオーバーライドします。

しかし、いずれかの子アクティビティのhandleEvent()メソッドは、最初のものを除き、決して呼び出されません!

誰かがこの現象を説明できますか?

はより明確にしようとすると:

抽象親がevent-> 抽象親がイベントを受け取る活動ChildAを作成して受信

- >活動ChildBを作成 抽象親がイベントを受け取る - >

親がイベントを受け取る活動ChildCを作成します。 ChildBまたはChildCがアクティブなアクティビティであっても、handleEvent()は処理する必要がありますが、ChildAのhandleEventメソッドのみが呼び出されます。

誰でも?

答えて

0

ためです:ハンドラが1つのスレッドで作成された場合、メッセージは、他に受信されないことを意味し

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

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

これは、メイン(UI)スレッドにHandlerを関連付けます。この問題を解決するために、Handlerこの方法を作成します。

+0

ハンドラは抽象(親)アクティビティにあります。ハンドラはすべてのメッセージをうまく受信します。しかし、異なる子アクティビティで実装されたhandleEvent()メソッドを呼び出すときは、handleEvent()メソッドのうちの1つだけが実行されます。すべての子アクティビティのすべてのhandleEvent()メソッドが実行されると思います。 – DKIT

+0

次に、いくつかのコードを提供する必要があります。アクティビティをどのように開始するのか、クラス階層は何かなど、あなたの質問からは分かりません。 –