4

BroadcastReceiverを使用するアラームがありますが、スレッドについて少し混乱しています。別のスレッドで実行して、他のスレッドに応答しなくなることのないようにしたいのですが、Androidドキュメントを見ると、メインスレッドが1つしかないのか、各アプリケーションにメインスレッドがあるのか​​がわかりません。独自のメインスレッド。

たとえば、アプリケーションが実行されていない場合、各アプリケーションが独自のメインスレッドを実行すると、BroadcastReceiverで個別のスレッドを実行する意味は何でしょうか。つまり、ユーザーの他のプロセスに影響を与えることはありません。私は走っていなかったので、それをしていなくても害はありませんでした。ただし、対照的に、すべてのアプリケーションに1つのメインスレッドがある場合は、アクションを別のスレッドに移動する必要があります。私は愚かな質問をしていないことを望みます。完全に理解したいだけです。前もって感謝します。

4

3 に答える 3

8

Android Developerページを閲覧した後、BroadcastReceiversはメインIOスレッドで実行されていると思います。

BroadcastReceiversには、goAsync関数があります。

ディスクIOによるメインUIスレッドのグリッチを回避するために、それに関連する作業を別のスレッドに移動する実装。

ソース

于 2012-07-12T00:53:59.830 に答える
2

androidの基本的なルールは、androidのすべてのコンポーネントがデフォルトでメインスレッド(UIスレッド)で実行されることです。

ブロードキャストレシーバーはAndroidの非常に軽量なコンポーネントであり、最大10秒でその機能を実行する必要があります(Androidのドキュメントによる)。

受信機からアラームを鳴らしたいので、ユーザーのUIの応答性に深刻な影響を与えることはないと思います。したがって、レシーバーからアラームを開始するためだけに別のスレッドを開始する必要はありません。

開発者のAndroidから取得した参照

于 2013-12-03T10:58:03.200 に答える
0

ブロードキャストレシーバーは、対象のアプリケーションで現在実行されているシステムに登録されます。具体的には、非同期で実行されるため、メインスレッドで何も停止しません。この特定のメッセージはブロードキャストされ、IntentFilterを介してそのブロードキャストをリッスンするために登録されているプロセスに渡されます(保護されている場合は、許可が必要になるか、使用できなくなります)。

でも; ブロードキャストを受信したら、AsyncTaskを開始して、実行したいプロシージャを実行することをお勧めします。

放送受信機がどのように機能するかについて心配する必要はありません。

于 2012-07-12T00:55:35.407 に答える