6

私はGoogleのC2DMを使い始めています。このプロセスの一部には、登録が行われたときにブロードキャストインテントを受信することが含まれます。Googleの公式C2DMドキュメントでは、サンプルコードはBrodcastReceiverのonReceive()メソッドに次のコメントを示しています。

// Send the registration ID to the 3rd party site that is sending the messages.
// This should be done in a separate thread.

ただし、 BroadcastReceiverのドキュメントを含め、私が読んだすべてのことは、onReceive()が戻るとすぐにプロセスが強制終了される可能性があるため、onReceive()からスレッドを開始するとほぼ確実に問題が発生することを示唆しています。

誰かが間違えた可能性があり、別のスレッドを使用することについてのコメントは無視する必要がありますが、誤解を招く場合でも、彼らがそれを言った理由があると思います。

戻る前にonReceive()と同じスレッドからネットワークを使用できない、または使用すべきでない理由はありますか?そうすることが問題になる場合、C2DMの外部であっても、一般的な状況でなければならないことを処理する適切な方法は何ですか?サービスを開始しますか?

4

1 に答える 1

3

さて、さらに調査を行った後、私はこの質問を見つけました、そして選択された答えonReceive()はUIスレッドで実行されると述べています。これは私には起こりませんでした。これはマニフェストで宣言されたレシーバーであるため、私が知る限り、UIスレッドはありませんでした

AndroidのUIスレッドでネットワーキングを行うことはできないので、それが私の質問の最初の部分に答えます。

  • からネットワーク通信を開始することはできませonReceive()

UIスレッドを使用しているという事実は、ASyncTaskが適切であるように見えますが、別のスレッドを手動で開始するのと同じ問題があります。したがって、aServiceが唯一のオプションであるように見えます。

于 2012-06-06T09:10:50.703 に答える