【RebuildingSaga】OutOfMemotyErrorの消極的な対策

おはようございます。
sadakです。

この連休中はアプリ開発をやらないと思っていましたが
ちょっとクラッシュレポートが来たんです。

内容は「OutOfMemotyError」です。

数か月前にBitmapの読み込み後に
bitmap.recycle()
をするよう修正していたんですが
どうもまだ検出されるということは
他のインスタンス(ImageViewなど)にBitmapが残っていたりするのかも。。

で、一つ一つつぶすのは時間がかかるということで


この目からウロコのスライドを参考に
Androidのヒープサイズをあげてみました。


左がlargeheap適用前、右がlargeheap適用後です。

NormalMemorySize は  largeheap適用前の最大メモリ(たぶん)
LargeMemorySize は  largeheap適用後の最大メモリ(たぶん)
スライド14Pに記載されているコードの値です。
たしかに largeheap適用後は
最大ヒープメモリが増えていますね。

ちなみにこのダイアログは
こんなコードです。(あっているかな。。)

リビルディング・サガで
戦闘を行うと、画像読み込みがたくさん発生するので
メモリが増えます。
ちょっと、戦闘前と戦闘後でメモリを確認してみました。




メモリが必要となったので
TotalとUsedが増えていますね。戦闘を何度か繰り返すと
メモリが下がっているときがあり、これはGCが走ったんではないかと
予想しています。すごくメモリリークが発生している!というわけではなさそう。。

さきほどのスライドをみたんですが
コンカレントGCになっているようなので
フルGCによる完全フリーズ!みたいなことが
起きにくくなっているようですね……。

開発中にしばしばアプリ画面が固まったことがあって
「さてはフルGCが走っているな……こいつめ!」
と思っていたんですが、そんなことは発生しないようでした。
(なんであのとき固まっていたんだろう……??)

まぁ、とりあえず
OutOfMemotyErrorが走っているという事は
メモリリークはしているのは間違いないんですが
いったんOutOfMemotyErrorを緩和するために
largeheapを適用したものをリリースしてみます。

ちょっと消極的な対策ですが
がっつり解析して対応する!という時間がないので
これで様子を見ます。



このブログの人気の投稿

【EvaliceSaga】ちょっとプレイしてみた①

【RebuildingSaga】攻略wikiを作ってみました。

【Android開発】Admobでインタースティシャル広告を実装するときに気を付けること。