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]
と書くことにより、動的にメモリサイズを設定できますね。