OutOfMemoryErrorを救う方法
とある開発中のアプリを解像度縦横それぞれ1.5倍の端末にそのまま突っ込んでみたら、OutOfMemoryErrorが出ました。
解像度的には増えているのでcreateBitmapしてる部分が単純に2.25倍になるわけなので、最初しょうがないかなとも思いましたが、以前動かしていた端末でもギリギリではなかったし、さらにメモリも潤沢にあるはずのNew端末で、一部でしか使っていないBitmapの使用料が2倍程度増えたからって、それはないだろう?と思い、調べてみました。
で、原因はまだわかりませんが、以前の端末よりアプリが使用出来るNative Heapが少ない様子。
ネイティブヒープ量は
Debug.getNativeHeapAllocatedSize()
でわかるようです。
どうにかならないかと思って調べていたら、このサイトを発見!
http://d.hatena.ne.jp/baroqueworksdev/20110513/1305313028
API LEVEL 11からAndroidManifest.xmlに以下を指定可能に。
android:largeHeap="true"
これでとりあえずは解決できました。
が、そもそもメモリ使い過ぎなのかもしれませんし、安易にコレを使っていいものかどうか…わかりません。他に悪影響なければいいんですけど。
参考URL
http://d.hatena.ne.jp/baroqueworksdev/20110513/1305313028
http://www.kaede-software.com/2012/04/_outofmemoryerr.html
http://www.saturn.dti.ne.jp/npaka/android/memory/index.html