1

BroadcastReceiverを使用しており、着信SMSメッセージに基づいて電話のGPS位置を見つける必要があります。

コールバックでLocationResultを返すかなり標準的なクラスを使用していますが、BroadcastReceiverクラスでそれを使用すると、時間がかかりすぎてOSによって強制終了される可能性があります。

サービスを使用してみましたが、2つのイベントが同時に発生するとANRの問題が発生します。

BroadcastReceiverでスレッドを使用することは災害のレシピであると聞いたので、それを試してみませんでした。

現在、IntentServiceを使用して、着信リクエストをキューに入れ、GPSロケーションファインダーを処理しています。私の質問は、onHandleIntentが終了したときにコードが死なないように、コールバックでコードを使用する方法です。代わりに睡眠を使うことを考えましたが、それは洗練された解決策のようには思えません。

これを行うためのより良い方法はありますか?BroadcastReceiverを使用する必要がありますが、GPSに15〜20秒の期間にわたって位置を検出させるスマートな方法が必要です。

どんなアイデアでも大歓迎です!(Android noobはこちら)。

4

1 に答える 1

0

サービスを使用してみましたが、2つのイベントが同時に発生するとANRの問題が発生します。

つまり、メインのアプリケーションスレッドで作業を行っているということです。これは、サービスを含め、常に避けたいことです。のようなメソッドonStartCommand()はメインアプリケーションスレッドで呼び出されることに注意してください。

私の質問は、onHandleIntentが終了したときにコードが死なないように、コールバックでコードを使用する方法です。

IntentServiceそれがあなたの問題に対する素晴らしい答えではない理由です。定期的に必要ですServiceが、独自のバックグラウンドスレッドで作業を行っている場合や、完了時にサービスを停止している場合などです。

の形式でこれの概念実証実装がありLocationPollerます。

于 2012-04-10T16:02:44.193 に答える