6

基本的に、いくつかの機能を備えたタイマー/ストップウォッチであるアプリを作成しました。クロックを刻み、特定のタイマー イベントにサブスクライブしているリスナー (アクティビティなど) にアラートを送信するサービスを定義しました。

Android がサービスを強制終了するたびに (メモリの再収集のために) タイマー/ストップウォッチの状態 (経過秒数、次のイベントまでの時間、ユーザー提供の構成など) を保存し、サービスの状態を復元できるようにしたいと考えています。ユーザーがアプリを復元したとき。 私たちにとって、これはおそらくオブジェクトとその状態を保存および復元することを意味します。 私たちのサービスにはたくさんの構成があります。基本的に、私たちのサービスはすべてのタイマー モデルで構成されており、サービスが終了するとそれらのモデルも終了します。

サービスの状態を維持するためにどのような戦略がありますか? PreferencesManager はおそらく、私たちの目的に対して十分に堅牢ではありませんが、そうである可能性があります。Service の onDestroy() メソッドに依存して状態を保存できますか (SQLite で言えば)? アンドロイドが私たちのプロセスを強制終了することを決定した場合、サービス onDestroy() が呼び出されることは保証されていますか?

ありがとうございました!

4

1 に答える 1

12

時計を刻み、特定のタイマー イベントにサブスクライブしているリスナー (アクティビティなど) にアラートを送信するサービスを定義しました。

時計の刻みを監視しながら、常にサービスを実行する必要はありません。このアプローチは、正当な理由もなくシステム RAM を拘束するため、ユーザーに敵対的です。AlarmManager「特定のタイマーイベント」で制御を取得し、残りの時間はサービスをメモリから除外するために使用します。

タイマー/ストップウォッチの状態 (経過秒数、次のイベントまでの時間、ユーザー提供の設定など) を保存できるようにしたいと考えています。

「経過秒数」を保持しないでください。タイマー/ストップウォッチの開始時刻を保持します。経過秒数は減算の問題です。

「次のイベントまでの時間」を保持しないでください。次のイベントの時間を保持します。

これらの値は継続的に変更されないため、タイマーが開始されたとき、またはタイマーの有効期間内のその他の主要なライフサイクル イベントが発生したときに保持できます。

サービスの状態を維持するためにどのような戦略がありますか?

データベース、SharedPreferences、または独自に選択したファイル形式を使用します。

Service の onDestroy() メソッドに依存して状態を保存できますか (SQLite で言えば)?

いいえ。

アンドロイドが私たちのプロセスを強制終了することを決定した場合、サービス onDestroy() が呼び出されることは保証されていますか?

呼び出されることを保証するものではありません。

于 2013-10-16T19:26:38.313 に答える