0

ここに例示されているのと同じアプローチを使用して、Applicationクラスを拡張するクラスにいくつかの静的オブジェクトを保持するAndroidアプリケーションがあります。

このクラスによって保持されているオブジェクトは、アプリのすべてのアクティビティ間で共有および操作されます。

すべてが正常に機能しますが、しばらく前に、アプリケーションがバックグラウンドでしばらく実行され、復元されると、拡張クラスに保存されていたデータが失われ、アプリが大量のデータをスローし始めることに気付きました。 NullReference例外。

これは、アプリケーションがOSによって一時的に破棄され、再度使用する必要があるときに再作成されたために発生したと思います。

では、このシナリオをどのように処理できますか?アクティビティのonDestroyイベントにサブスクライブせずに、アプリケーションが一時的に破棄されていることを検出する方法はありますか?私が行ったテストでは、アプリのバックグラウンドプロセスを停止するように要求したときに、onDestroyイベントが呼び出されませんでした。

どうもありがとう!

4

2 に答える 2

0

プロセスがいつ強制終了されるかを判断する方法はないため、重要なデータ(SDカードなど)を常にどこかに保存し、AppクラスのonCreate()メソッドに復元する必要があります。

また、onLowMemory()とonTrimMemory()を確認し、メモリ内の不要なデータをすべて解放して、OSがアプリを破壊しないようにします。これにより、アプリがメモリ不足であると判断する理由の1つになります。

于 2012-07-02T04:57:31.533 に答える
0

いいえ、そのような静的変数に格納するデータをいつ永続化する必要があるかを判断する方法はありません。少なくとも私の知る限り、システムがこれについて通知するコールバックはありません。

したがって、静的変数のみを使用して一時データを格納するか、永続的なソースからアクセスされたデータをキャッシュする必要があります。私は多くのプロジェクトでこの問題に直面しており、アクティビティ全体でデータを信頼性の高い方法で保存するために、常にインテント/共有設定/sqliteなどを使用することになりました。

于 2012-07-02T05:00:53.077 に答える