0

1) アクティビティの OnStop メソッドですべてのビットマップとデータをリサイクルすることは、良い戦術と考えられています。

2) 構成変更のたびにデータを再作成することを避けるために、リテーナー Fragment を使用することも良い戦術と考えられています。しかし、これら2つを組み合わせる方法がわかりませんか?

フラグメントを使用して一連のビットマップをロードするとしましょう... OnCreate で、そのフラグメントが null であるかどうかを確認して、データを取得するか、新しいフラグメントをインスタンス化してそれらを作成します。OnStop() ですべてのビットマップをリサイクルすると、すべてのデータがリサイクルされるため、構成の変更時に何も取得されなくなります。

だから....これら2つの戦術を組み合わせる方法はありません。私が間違っている?そうでない場合、どちらを使用するのが最適ですか?

私の場合は、SDカードフォルダーから画像をロードすることです。写真は 1 枚だけかもしれませんし、500 枚かもしれません...そして、写真を表示するだけが私のアプリのすべてではないので、このアクティビティの後、他のアクティビティによってメモリが必要になる可能性があります。

4

1 に答える 1

0

ビットマップメモリ​​の管理から:

Android 2.3.3 (API レベル 10) 以前では、recycle() の使用が推奨されます。アプリで大量のビットマップ データを表示している場合、OutOfMemoryError エラーが発生する可能性があります。recycle() メソッドを使用すると、アプリはできるだけ早くメモリを再利用できます。

this によると、API 11 以降を実行しているデバイスで recycle を呼び出す必要さえないため、実際には問題にならない可能性があります。

また、アプリが最初に使用しているすべてのメモリをシステムが再利用するため、アプリが破棄されている場合でもビットマップをリサイクルする必要はありません。

リサイクルは、大量のビットマップまたは大きなビットマップを表示していて、アプリがまだ実行されている間にアプリでメモリを再利用する必要がある場合にのみ必要です。

注意すべきもう 1 つのことは、あなたが試みている戦略では、Activity の onStop() ではなく、保持された Fragment の onDestroy() でリソースをクリーンアップすることです。フラグメントが破棄されることはないため、保持されたフラグメントの OnDestroy() は構成の変更時に呼び出されません。したがって、リソースはアクティビティのライフサイクルを超えてメモリ内にとどまることができ、アプリケーションのライフサイクルの終わりに破棄されます。

于 2014-10-24T19:33:13.187 に答える