0

ビットマップを処理するときに、Android アプリでいくつかのメモリの問題が発生しています (duh!)。

サーバーから画像をロードする複数のアクティビティがあります。これは、アクティビティの背景画像である可能性があります。この背景画像は複数のアクティビティで同じである可能性があり、現在、各アクティビティは独自の背景画像をロードしています。これは、フローが ac1->ac2->ac3->ac4 の場合、同じイメージが 4 回読み込まれ、4 倍のメモリが使用されることを意味します。

このシナリオの画像処理を最適化するにはどうすればよいですか? 画像が保存される画像キャッシュを作成し、各アクティビティが最初にキャッシュに画像を要求しますか? この場合、キャッシュから画像をガベージ コレクションするタイミングをどのように知ることができますか?

提案、優れたチュートリアルへのリンクなどは大歓迎です。

よろしく

編集: デバイスの画像をダウンロードする場合、正確なサイズが使用されます。つまり、UI 要素が 100x100 ピクセルの画像を必要とする場合、そのサイズが取得されるため、スケーリングは必要ありません。そのため、メモリにロードするときに画像を縮小することについてはわかりません。次のアクティビティに移動するときにアクティビティの画像をアンロードし、戻るときにリロードする必要があるかもしれません。

4

2 に答える 2

0

試してみたいことの 1 つは、デバイスにより適したサイズにビットマップを縮小する (サムネイルを作成する) ことです。ビットマップを縮小しないと、Android デバイスのすべての RAM を簡単に使い切ってしまいます。このレシピは、その場で行う方法を示しています。これを調整して、画像をディスクに保存できます。

LRUCacheの独自の実装を作成して、アプリの画像をキャッシュすることもできます。

于 2013-06-26T20:39:03.587 に答える
-1

アップデートの準備ができたら、別のヒントをお伝えします。人々がそれを望むなら、私はまだパッチを投稿することもできます..

これらのビットマップで行う必要があるのは、using ブロックを使用してそれらを呼び出すことです。そうすれば、Android はそのブロックが実行されるとすぐにビットマップをアンロードします。

例:

using(Bitmap usedBitmap = new Bitmap()){
     //Do stuff with the Bitmap here
     //You can call usedBitmap.Dispose() but it's not really needed
}

このコードを使用すると、アプリは、使用されているすべてのビットマップをメモリに保持する必要はありません。

于 2013-06-28T12:37:22.383 に答える