2017-09-13 1 views
0

私はAndroidアプリケーションのメモリ消費を監視していて、興味深い現象に気付いています。ビットマップ(PNGファイル、380x10640)を読み込むと、一部のデバイス(たとえば、Modecom FreeTab 9004、API 17)でビットマップを読み込むコードを実行した後に使用可能なメモリ量が15 MB減少し、60 MB(すなわち、Nexus4 API 25)を使用します。誰が私にこのことが起こっている理由を説明できますか?BitmapFactoryとメモリ消費に関するさまざまな値

私は、ビットマップをロードするために、ヒープを監視するためにRuntime.getRuntime().freeMemory()を使用し、次のコマンド。

Resources r = getResources(); 

private Bitmap imageOne; 

// ... 

imageOne = BitmapFactory.decodeResource(r, R.drawable.bitmap_1); 

答えて

0

メモリの消費量の違いは、デバイスのデフォルトのビットマップ構成が異なるためです。
たとえば、デフォルト値がRGBA_F16の場合、各ピクセルは8バイト、ARGB_8888 - 4バイトかかります。したがって、計算する場合:

380 * 10640 = 4043200 pixels * 8 bytes = 32345600 byte ~32 mb. 

32の代わりに60 mb - 画像がキャッシュされている、バッファされている、または間違って2回読み込んでいる可能性があります。

手動で画像を読み込むことができます。この方法で、Configを選択できます。

UPDATE1: または60mbと15mbは、異なるDPIの画像プレスケーリングによって発生する可能性があります

関連する問題