1

すべてのアプリケーションデータを格納する独自のApplicationクラスオブジェクトがあります。Application.onCreateで、すべてのアプリケーションオブジェクトを作成し、SharedPreferencesからデータを読み取ります。私の問題は、アプリケーションがバックグラウンドに移行すると、アプリケーションが強制終了される可能性があることです。ランチャーからアプリを選択すると、アクティビティスタックが復元されます(ランチャーアクティビティではなく、最後のアクティビティが起動されます)。問題は、Application.onCreateが呼び出されないため、すべてのアプリケーションオブジェクトが読み込まれず、問題が発生することです。WHatは、アプリケーションデータ/オブジェクトを保存/復元するための最良の方法です。これはActivities.onCreate/onDestroyで実行できることは知っていますが、アプリに多くのアクティビティがあり、アプリケーションが強制終了/再起動されたときにどれが一番上になるかわかりません。

4

2 に答える 2

1

ApplicationObjectをシリアル化し、ファイル(単純)またはオブジェクトストア(複雑)に保存します

または、シリアル化/逆シリアル化機能を実装できます

ここで、SerializeはオブジェクトのプロパティをJSONに変換し、保存します

DeSerializeはJSONをロードし、オブジェクトにデータを入力して戻ります。

于 2013-01-16T08:52:34.833 に答える
0

アプリケーションを起動し、ランチャー アクティビティからではなく、最後のアクティビティから開始する場合、それはアプリケーションが強制終了されていないことを意味します。したがって、この場合、アプリケーションがまだ生きているため、アプリケーションの onCreate メソッドは呼び出されません。

アプリケーションの onCreate メソッドは、アプリのライフサイクル中に 1 回呼び出されます。したがって、アプリ クラスが有効になるまでは、すべてのアプリケーション データにアクセスできる必要があります。

テストする必要がある場合は、アプリケーションが強制終了されたときに何が起こるかを確認するため、「アプリケーション マネージャー」に移動して手動でアプリを強制終了する必要があります。

編集: アプリケーションが生きている場合、アプリケーションがデータへの参照を持っている限り、gc でそれらを削除することはできません。したがって、あなたの場合、おそらくデータを正しく更新するのを忘れていました。したがって、この場合、シリアル化は役に立ちません。そうしないと、バグが発生します。

于 2013-01-16T09:08:12.257 に答える