ブロードキャストレシーバからasynctaskを起動することが悪い習慣と考えられるかどうかを知りたいですか?私は基本的にGoogleのC2DMサーバーに登録して、登録済みのブロードキャスト受信者を傍受すると、私のサーバーに送信したいと思う。ブロードキャストレシーバからasynctaskを開始する
これを達成する最善の方法は何ですか?
ブロードキャストレシーバからasynctaskを起動することが悪い習慣と考えられるかどうかを知りたいですか?私は基本的にGoogleのC2DMサーバーに登録して、登録済みのブロードキャスト受信者を傍受すると、私のサーバーに送信したいと思う。ブロードキャストレシーバからasynctaskを開始する
これを達成する最善の方法は何ですか?
はい、これは悪い習慣とみなされます。これは、AsyncTask
からBroadcastReceiver
を起動した場合、onReceive()
が返され、実行中の他のアクティブコンポーネントがない場合、Androidがプロセスを停止させる可能性があるからです。
Service
をBroadcastReceiver
から開始するのが正しい方法です。このService
はAsyncTask
を管理する必要があります。こうすることで、Androidはアクティブなコンポーネントを認識し、Androidが早期にそれを強制終了することはありません(十分なメモリ条件など、他の重大な条件が発生しない限り)。
@inazrukありがとう – Hades
非同期タスクのアプリケーションコンテキストへの参照がある場合はどうなりますか? onReceive()が返っても、システムはまだプロセスを終了できますか? – 500865
プロセスが終了する確率は、誰がこのプロセスの内部を参照しているかとは全く関係ありません。殺される確率は、現在どのコンポーネントがプロセス中でアクティブであり、どのライフサイクルが進行中であるかによって大きく異なります。 – inazaruk