私はバックグラウンドで長時間実行する必要のあるサービスを持っています。フォアグラウンドサービスは、通知のために適切ではありません。ポーリングをしている間は、静かに実行する必要があります。これはすでにこれを行い、必要なように動作します。これは私の問題ではない、これはちょっとした背景だ。OSで殺されるAndroidサービスを正常に処理するにはどうすればよいですか?
サービスがユーザーによって強制終了され、onDestroy()が呼び出されると、データはdbに保存されます。問題はありません。また、電話がオフになっている私はスクリーンオフ/リッスンを聞く放送受信者があります。ここでも問題はありません。
問題は、メモリが不足してOSがサービスを終了したときです。サービスが殺され、onDestroy()が呼び出されたとは思わない。そうであれば、私のデータは保存されません。したがって、サービスが強制終了されてしばらく実行されている場合、収集したすべての情報は失われます。
それでは、私の質問は次のとおりです。リソースを正常にクリーンアップしてデータを保存するにはどうすればよいですか?システムがサービスを停止する前にデータを保存するためのコードを実行する方法はありますか? データ損失の量を減らすために、数分の間隔でデータベースにサービスを保存することを検討しました。これはパフォーマンスが賢明でどれくらい良いのか分かりません。クエリは、例えば5分の期間に30行までしか挿入しない可能性があります。おそらく少ない。
私はAndroid開発に比較的新しいので、ここで質問をする前にこの問題を調べるように最善を尽くしました。私が何かを見過ごした場合にはお詫び申し上げます。
ありがとうございます!
onDestroyを呼び出して、そこでデータを保持する必要があります。サービスが再開されたら、agaibをロードしてください。 –
リソースが少ないためにシステムがサービスを終了するときに、onDestroy()が呼び出されません。 @BLaZuRE - あなたがリンクしたドキュメントはアクティビティのためのものです。私が間違っているが、サービスにonPause()メソッドがない場合は、私を修正してください。 –