19

スレッドを作成するサービスがあります。このスレッドはいくつかの作業を行ってから、を呼び出しsendBroadcast()ますService。これはsendBroadcast()、サービスが実行されているスレッドからではなく、ワーカースレッドから呼び出されることを意味します。

これは大丈夫ですか、それとも(とを使用して)sendBroadcast()と同じスレッドから呼び出されていることを確認する必要がありますか?ServiceHandlerRunnable

私はこれをstackoverflowとDianneHackbornsの投稿で見つけました。

投稿によると、それは大丈夫なはずです。私が尋ねる理由は、投稿が2歳で、何かが変わった可能性があるためです。また、Androidのドキュメントでこれについて何も見つかりませんでした。

4

2 に答える 2

21

それは結構です。ブロードキャストはAndroidOSに渡され、実際にはOSスレッドを使用して送信されるため、ブロードキャストを送信するスレッドは関係ありません。

于 2012-07-25T19:10:00.797 に答える
2

あなたはすでにあなたの答えを得ていますが、おそらく私はさらにいくつかを追加することができます。

複数のスレッドから呼び出すのは問題ないようです。どのスレッドsendBroadcast(...)から呼び出しても、それを処理するのはonReceiveメソッドです(おそらくご存知でしょう)。また、デフォルトでは、アプリのメイン/UIスレッドで動作しています。あなたは経由でこの動作を変更することができますregisterReceiver(...)

これは、メッセンジャーを使用してクライアントとサーバーを接続するようなものです。送信元のスレッドに関係なく、すべてのメッセージは、単一のスレッドで消費/ループされる単一のメッセージキューで処理されることを覚えておいてください。

于 2016-11-08T07:54:51.547 に答える