メモリの使用量異常について

347 views
Skip to first unread message

関本智史

unread,
Nov 4, 2013, 4:33:15 AM11/4/13
to android-g...@googlegroups.com
はじめまして。

アプリの開発を行っているのですが、Androidの設定→アプリから確認できるキャッシュしたプロセスを表示で確認出来るメモリの使用量が50MBを超えている状態になり、困っています。自分のXperiaZでは確認出来ていませんが、メモリの少ない端末だと落ちてしまうことがあるようです。

起動画面(アプリのロゴ画像をxmlでイメージビューのリソースを指定して表示)で16MB、トップページ(xmlでリソースを指定したイメージボタンが20個、小さいwebviewが上下に2つ)を表示するとその時点で50MBを超えてしまいます。

メモリから解放出来ていないのではないかと考え、

public static final void cleanUpView(final View view){

if(view instanceof ImageButton){

            ImageButton ib = (ImageButton)view;

            ib.setImageDrawable(null);

            button++;

        }else if(view instanceof ImageView){

            ImageView iv = (ImageView)view;

            iv.setImageDrawable(null);

            image++;

        }else if(view instanceof ViewGroup){

            ViewGroup vg = (ViewGroup)view;

            int size = vg.getChildCount();

            for(int i = 0; i <= size; i++) {

                cleanUpView(vg.getChildAt(i));

            }

        }

}


上記のコードで解放を試みました。その結果、eclipseのDDMS上で、usedが90%→50%以下に軽減出来ているのは確認しました。ですが、最初に書いたAndroidの設定から見られるメモリの使用量では何も変化がありませんでした。

テスト用のアプリを別に作り、起動画面(xmlでイメージビューのリソース指定)から画像などなにも表示しない画面に遷移させて確認したところ、メモリについて同じ現象が起きています。どちらもonCreateでレイアウトを指定しているだけのアクティビティなので、他に処理は書いていません。

メモリの使用量を減らすにはどうしたらいいでしょうか?よろしくお願いします。



kacodama

unread,
Nov 5, 2013, 2:43:03 AM11/5/13
to android-g...@googlegroups.com
思いがけず容量を食う経験として、以下のようなものがありました。

・解像度に応じたリソース画像を用意していない
  ⇒適したサイズがない場合、自動的に拡大・縮小して画像を表示してくれますが、その拡縮処理でメモリを食います。
  画像数が多いとその分余計に消費が多くなります。私の場合も、当時の流通機種で1端末だけ極端にメモリの少ないものがあり、初期化で落ちていて発覚しました。

mdpi, hdpiなどにきちんと画像を用意することで解決しました。
以上ご参考までに。

2013年11月4日月曜日 18時33分15秒 UTC+9 関本智史:

Shigeo Mutoh

unread,
Nov 5, 2013, 3:26:06 AM11/5/13
to android-g...@googlegroups.com
武藤です。

いくつか申し上げたいことがあるのですが、まず第一に、
50Mのメモリ使用量は、非常識であるとは思えません。
もちろん、少ないに越したことはないのですが。。。
私のICS端末では、「設定」が40M食っています。

次に、WebViewが1個あたりどれぐらい食うかですが、コンテンツに
左右されると思いますが仮に10Mだとすれば、驚くべき省メモリ
性能だと思います。

したがって、20個のImageも含め、アプリの仕様からしますと、50Mbの消費量
は妥当、むしろ少な目なのではないでしょうか?

問題は、メモリの少ない機種では落ちてしまうという一点だと思います。
たぶん、古い2.x系の機種でしょうか。
エミュレータで少ないメモリにして再現させるのが手っ取り早いかと。
やみくもに減量しても空振りに終わってしまうと思います。

では。

関本智史

unread,
Nov 5, 2013, 11:57:09 AM11/5/13
to android-g...@googlegroups.com
回答ありがとうございます。
とても参考になります。解像度ごとに画像を準備していたのですが、抜けがないか調べてみます。

2013年11月5日火曜日 16時43分03秒 UTC+9 kacodama:

関本智史

unread,
Nov 5, 2013, 12:00:45 PM11/5/13
to android-g...@googlegroups.com
回答ありがとうございます。
目安がわからず、50MBを超えることが一概に異常とは言えないと聞いてほっとしています。
とても参考になります。

2013年11月5日火曜日 17時26分06秒 UTC+9 TM:
Reply all
Reply to author
Forward
0 new messages