2011-10-26 17 views
8

ブロードキャストレシーバからasynctaskを起動することが悪い習慣と考えられるかどうかを知りたいですか?私は基本的にGoogleのC2DMサーバーに登録して、登録済みのブロードキャスト受信者を傍受すると、私のサーバーに送信したいと思う。ブロードキャストレシーバからasynctaskを開始する

これを達成する最善の方法は何ですか?

答えて

18

はい、これは悪い習慣とみなされます。これは、AsyncTaskからBroadcastReceiverを起動した場合、onReceive()が返され、実行中の他のアクティブコンポーネントがない場合、Androidがプロセスを停止させる可能性があるからです。

ServiceBroadcastReceiverから開始するのが正しい方法です。このServiceAsyncTaskを管理する必要があります。こうすることで、Androidはアクティブなコンポーネントを認識し、Androidが早期にそれを強制終了することはありません(十分なメモリ条件など、他の重大な条件が発生しない限り)。

+0

@inazrukありがとう – Hades

+1

非同期タスクのアプリケーションコンテキストへの参照がある場合はどうなりますか? onReceive()が返っても、システムはまだプロセスを終了できますか? – 500865

+0

プロセスが終了する確率は、誰がこのプロセスの内部を参照しているかとは全く関係ありません。殺される確率は、現在どのコンポーネントがプロセス中でアクティブであり、どのライフサイクルが進行中であるかによって大きく異なります。 – inazaruk

2

ハニカムからは、goAsync()に電話をかけることができます。その後、作業を​​非同期で行うのに10秒かかります。

hereの使用例を表示できます。

関連する問題