1

アプリがバックグラウンドに置かれ、後でアクティビティに再開された場合、別のアクティビティで設定された静的クラス変数がガベージコレクターによってリセットされ、値がゼロに設定された可能性がありますか?

メインのアクティビティでいくつかのpublicstaticint変数を使用し、他のさまざまなアクティビティでグローバル変数として使用しています。Androidマーケットからデベロッパーコンソールでクラッシュレポートを受け取りました。このレポートでは、アプリが別のクラスのpublic static int変数の値を使用するアクティビティに再開するという説明しかありませんが、値は(不思議なことに?)ゼロになります。アプリが最初に起動したときに、他の何かに設定されていたことを知っています。これは可能ですか?

私の疑いが正しければ、アプリがバックグラウンドに置かれたときにグローバル変数の値を保持するための推奨される方法は何ですか?それらをOnPause()のSharedPreferencesに保存するか、onSaveInstanceStateなどを使用しますか?

4

3 に答える 3

4

アプリがバックグラウンドに置かれ、後でアクティビティが再開された場合、別のアクティビティに設定された静的クラス変数がガベージ コレクターによってリセットされ、値がゼロに設定される可能性はありますか?

「ガベージコレクターによるリセット」ではありません。ただし、他のアプリケーションのためにメモリを解放するために、プロセスが Android によって終了された可能性があります。

アプリがバックグラウンドに置かれたときにグローバル変数の値を保持するための推奨される方法は何ですか?

静的データ メンバーはキャッシュのみにする必要があります。何が起こっても保持したいデータ (プロセスの終了など) は、フラット ファイル、SharedPreferencesデータベースなどの永続的なストアに保存する必要があります。onPause()その後いつでも、通知なしにプロセスが終了する可能性があるため、そのデータを永続化するように手配する可能性があります。

于 2012-01-28T16:19:40.187 に答える
1

静的変数には注意してください。シングルトンに関する説明については、リンクに従ってください (状態を維持するために静的変数も使用します): https://stackoverflow.com/a/9004638/1127492

于 2012-01-28T16:32:48.633 に答える
0

この値は、アクティビティのメソッド onDestroy の SQLite に保存するか、終了に応答する別のメソッドに保存できます。

于 2012-01-28T19:24:04.323 に答える