1

私の問題

場所の変更を監視するサービスがあります。これはバックグラウンドで実行され続けることが重要であるため、フォアグラウンドサービスです。

私の問題は、バックグラウンドで物事が破壊されている間に、このデータを保存するにはどうすればよいですか。

私の質問

これは私の潜在的な解決策に私をもたらします。

Applicationマニフェストファイルで宣言するサブクラスがあります。

これに保存されているオブジェクトが私の生涯Singletonを通じてアクセス可能であり、したがって私の場所を保存する手段を私に与えることを確認するのは安全でしょうか?Service

前もって感謝します

4

3 に答える 3

2

あなたの質問に対する簡単な答えは「はい」です。Application基本的には、プロセスが実行する限り、そこに保存するものはすべて、Androidがより多くのメモリを取得するためにバックグラウンドからアプリを再利用する必要があるまで、メモリ内に可能な限り安定しています。フォアグラウンドアプリケーションの場合。ただし、状態データをそれ自体の中に保存するだけでは、それほど多くのメリットはありませんServiceAndroidには、アプリケーションのコンポーネントを選択的に破棄してメモリを再利用するメカニズムがありません。フォアグラウンドプロセスを満足させるために追加のメモリが必要な場合は、他のアプリのプロセス全体を優先度の高い順に(最近の使用とフォアグラウンド/バックグラウンドの優先度の状態に基づいて)強制終了します。

プロセスで実行Serviceすることにより、アプリケーションは、バックグラウンドにあるシステム内の他のアプリよりも優先度を高くし、プロセスが強制終了される可能性を減らします。実行をフォアグラウンドにすることServiceで、この優先度レベルをさらにわずかに上げるだけであり、Googleが長期間行うことを推奨するようなものではありません。システムが十分なメモリプレッシャーにさらされてアプリが強制終了されると、最終的にはプロセスが同じ運命をたどります。

プロセスの存続期間を超えて存続するためにデータのいずれかが本当に必要な場合は、Androidのローカルストレージ形式のいずれかにデータを永続化する必要があります。

于 2012-12-06T15:19:16.410 に答える
1

私はノーと言うでしょう。設定している静的変数を持つ静的クラスがある場合でも、OSが選択したときにいつでもプロセスを任意に強制終了しないという保証はありません。たぶん99%の確率であなたの言っていることがうまくいくかもしれませんが、私の意見ではそれは確実な解決策ではないでしょう。

提案されているように、重要なデータはデータベースまたはAndroidの設定に保存する必要があります。どちらか、アプリケーション/データにとってより論理的です。

于 2012-12-06T15:19:38.610 に答える
0

このApplicationオブジェクトは、Androidのライフサイクルで最も寿命の長いオブジェクトです。そうです、少なくともあなたと同じくらいの寿命がありますService。しかし、それがあなたが何かを救うのにどのように役立つのかはわかりません。Androidがプロセスを強制終了した後(フォアグラウンドサービスが終了するかどうかにかかわらず)、Service次に作成するときにデータをリロードまたは再作成する必要があります。

于 2012-12-06T15:18:54.863 に答える