Android アプリケーションヒープサイズを取得してみよう

AndroidはiPhoneと違い、各社からさまざまな機種が発売されているため
端末依存のバグが出やすいですよね。
そんな端末依存のバグを少しでも減らすため
今回は、端末ごとのアプリケーションヒープサイズ取得方法について
記事を書こうと思います。

メリット

アプリケーションヒープサイズを取得することにより、どんなメリットがあるのでしょうか。

・OutOfMemoryErrorの回避
使用しているヒープサイズが、アプリケーションヒープサイズを超えないよう調整する
(基本的には不要にメモリを消費しない作り、メモリリークを起こさない作りにすること)

・メモリキャッシュの最大メモリサイズを機種ごとに指定できる
全ての端末に共通のサイズを設定するのではなく
ヒープサイズから最大メモリサイズを動的に設定することにより
スペックの高い機種をハイパフォーマンスに動作させ
スペックの低い機種ではメモリ不足によるもたつきや、OutOfMemoryを回避
することができます。

アプリケーションヒープサイズの取得方法

ヒープサイズの取得方法のうち、今回は2通りの方法をご紹介させていただきます。

・Bytesで取得

[java]
Runtime.getRuntime().maxMemory();
[/java]

・Megabytesで取得

[java]
((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass();
[/java]

上記により、サイズを取得することができます。

例えば LruCache を使用する場合であれば

[java]
// アプリケーションヒープサイズを取得
final int mMemoryClass = 
((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass();

// LruCacheのメモリ最大値をアプリケーションヒープサイズ(Byte)の1/10に設定
final int cacheMaxSize = mMemoryClass * 1024 * 1024 / 10;
LruCache<String, Bitmap> mLruCache = new LruCache<String, Bitmap>(cacheMaxSize)・・・
[/java]

と書くことにより、動的にメモリサイズを設定できますね。