詳細
アプリには、アプリの起動時に実行されるバックグラウンド サービスがあります。このサービスでは、ononStartCommand()
は読み取り間に渡されたメートルのパラメーターを使用して GPS 位置のリッスンを開始します。たとえば、50メートルとしましょう。ロケーションが読み取られるたびに、次の操作が発生します。
- 読み取り場所はローカル データベースに保存されます
- データベースからすべての未送信の場所を取得する
- ロケーションは Web サーバーに送信されます
- 送信が成功した場合、場所はデータベースから削除されます
現在、この動作は場所が読み取られるたびに発生します。ユーザーは歩いている可能性があり、50 メートルまたはドライブを速くするのに時間がかかりますが、多くの読み取りを行うことができ、データベースの挿入/取得で混乱が生じる可能性があります。そのため、主な要求の 1 つは、すべての読み取り位置が読み取られたときに順次処理されるようにすることです。場所 1 を読み取り、挿入し、送信します... 場所 2 を読み取り、挿入し、送信します。
これを行う適切な方法が見つかりません。ご存知のように、サービスはアプリと同じメイン スレッドで実行されるため、UI をスムーズに実行するにはスレッドを使用する必要があります。
ExecutorService と Executors.newSingleThreadExecutor() を使用して、場所が読み取られるたびに新しいスレッドを送信することを考えていました。このようにして、処理が順番に行われることを確認しますが...読み取りごとに新しいスレッドを作成しますが、これはあまり良いことではないかもしれません.
この状況に対してどのような最善のアプローチを提案しますか?