2012-03-14 5 views
0

私はいくつかのマップを使って自分のアクティビティのデータをキャッシュします。私がアクティビティに操作を戻すと、GCによってマップが収集され、ヌルポイント例外がスローされます。だから私はそれを避けるためにこれらのマップを保存する必要があります。問題はどうすればいいのですか?単にpacerableを実装し、これらのデータをバンドルに入れるだけですか?優雅にこの問題をぶち壊す他の方法がありますか?助けを借りてお返事いただきありがとうございます。onPause()およびonSaveInstanceState()関数を使用して状態を保存します。

答えて

4

これらが本当にキャッシュである場合は、必要に応じて元のソースからデータをリロードするだけです。これが「キャッシュ」の目的です。一時的にアクセスを最適化し、他のもの(例えば、ローカルファイル)がバッキングストアになるようにします。

キャッシュの寿命を選択することができます。今は、単一のアクティビティの一部であるように見えます。つまり、そのアクティビティが破棄された場合、キャッシュは破棄されます。それは適切かもしれないし、そうでないかもしれない。また、一部のクラスの静的データメンバーにすることで、キャッシュをプロセス全体の生涯にわたって生き生きさせることもできます。 非常にである必要があります。この方法ではメモリリークが発生しないため、ヒープスペースが不足します。しかし、この場合、キャッシュはプロセスの間だけ存続します。

しかし、最終的にプロセスは終了します(たとえば、ユーザーがHOMEを押して、かなりの期間アプリケーションに戻ることはありません)。そのため、必要に応じて元のソースからキャッシュを再ロードできる必要があります。

関連する問題