2012-01-18 15 views
2

Androidアプリでは、複数のリスナーが必要です(ネットワークの変更、場所の変更など)。スレッドはAndroidでリスナーとどのようにやりとりしますか?

これらのスレッドは、私の主要なバックグラウンドサービススレッドではないスレッド(またはスレッド)で呼び出されます。 (私はサービス専用のアプリを作成しています。)

私の質問は:

が私のアプリを同時に発射リスナーでヒットすることができます、またはアンドロイドはシングルスレッドで私のリスナーを呼び出すことでこれを緩和しますか?

第2に、リスナーが「シーケンシーズ化」されていない場合、個々のリスナーはリエントラントですか?言い換えれば

は、私は私のリスナーに複雑な処理を行うことができ、あるいは彼らはただ、後で私のバックグラウンドサービスのスレッドを処理するために、同期リストに何が起こったのかダンプ(と彼らは「しながら、その眠りからバックグラウンドサービスのスレッドをウェイクアップすべきですそれで再)。

Androidのサンプルドキュメントや書籍では、スレッド同期の適用範囲がほとんどないようです。

おかげで、

クリス。

+1

あなたはどのようなリスナーについて話していますか? –

+0

http://developer.android.com/reference/android/location/LocationListener.html http://developer.android.com/reference/android/telephony/PhoneStateListener.html – fadedbee

答えて

3

あなたが話しているリスナーの種類はわかりませんが、一般的に自分のスレッドでは呼び出されません。それらはリスナーを登録するスレッドで呼び出されるため、リスナーをUIスレッドに登録するとUIスレッドで呼び出されます。スレッドLooperを作成すると、そのスレッドにリスナーを登録することができます。リスナーは、そのスレッドがヒットしたときに順番に起動します。

+0

これが単なるサービス(アクティビティなし)の場合は、サービスのonCreateを呼び出し、 'UI'スレッドを起動するスレッドですか? (UIはありませんが) – fadedbee

+1

これは正しいです。人々は、メインスレッドを意味するときにUIスレッドを使用する傾向がありますが、すべて同じです。 –

+1

ええ、ごめんなさい。 UIスレッドとメインスレッドは同義です。サービスはメイン/ UIスレッド上で実行されるため、その中で起こるすべてが他のすべてのプログラムに影響します。 – DeeV

関連する問題