2016-08-08 5 views
2

BroadcastReceiver.onReceiveメソッド内で実行されるアクションには時間制限が定義されていますか?Android:BroadcastReceiver制限時間

+0

時間制限はどういう意味ですか?通常、BoradcastReceiversはすぐにブロードキャストを受信します。 – Opiatefuchs

+0

@Opiatefuchs CommonsWareの回答で詳細を見ることができます。 – VSB

答えて

6

onReceive()は、UIを駆動するスレッドと同じメインアプリケーションスレッドで呼び出されます。通常、UIがフォアグラウンドにある場合に備えて、onReceive()がミリ秒で戻ってくるようにして、UIをフリーズしないようにします(a.k.a.、「jank」)。 5〜10秒の制限もあり、その後Androidは基本的にアプリをクラッシュさせます。

しかし、バックグラウンドスレッドを確実にonReceive()からフォークすることはできません。一度onReceive()が返され、フォアグラウンドにいない場合はプロセスが終了する可能性があります。

マニフェストに登録された受信者の場合、典型的なパターンは、onReceive()に独自のバックグラウンドスレッドを持つIntentServiceに作業を委任し、サービスであることをOSに通知します。プロセスを少し長く実行してください。

+0

[こちら](http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html#asynchronous-processing)をチェックしたので、ブロードキャスト受信機で長時間実行されるバックグラウンドタスクのためにgoAsync()メソッドを呼び出すことができます。これにあなたのコメントがありますか? – VSB

+1

@VSB:私はむしろ 'IntentService'アプローチを使用したいと思います。これは、作業中にデバイスが起きていることを確実にする必要がある場合に特に当てはまります。そのためのパターンには 'WakefulBroadcastReceiver'と' IntentService'が必要です。あなたが望むならば、あなたは 'goAsync()'を試してみることを歓迎します。 – CommonsWare

+0

私はあなたの 'Androidプログラミングチュートリアル'からアンドロイドを学びました。私はその時からこの時間制限について心に何かを持っていました! – VSB

関連する問題