SlideShare a Scribd company logo
Hello
 Out of Memory


ナオシム
Twitter @naosim_
Blog http://naosim.syoyu.net/
背景
・Androidはメモリ不足で良く落ちる
・その時出るエラーがOut of Memory
・原因のほとんどが画像がらみ
・一眼レフの画像とかマジやばい
Out of Memoryで
落ちないように
勉強しておきま
  しょう。
どうすると落ちる?

・必要以上にデカイ画像を読み込
む
・使い終わったのに解放しない
→意図的に「解放しないようにする
ヤツはいない。
ただ、
いつのまにか。。。
知らない間に。。。
実は。。。
Out of Memory対策
①画像ファイルの読み込み
 – サイズを小さくする                 1.Read     サイズ小
   →BitmapFactory.Options
 – 画質を落とす                               低画質
   →BitmapConfig
                                             null
②終了時                         2.Finish
 – 画像を捨てる宣言をする
   →bmp.recycle();
 – 参照をnullにする
                                        ポイ
   →drw.setCallback(null);
    mContext = null;
サイズを落とす



                                         アプリで使うサイズ




        原寸大(1200x800)                       サムネイル(120x80)


Androidにおける画像の取り扱い http://lablog.lanche.jp/archives/192
BitmapFactory.Optionsでサイズを落とす

                       情報だけ取得




                         倍率セット


                        小さく 取
                          得
Bitmap.Configで画質を落とす
                        通常は8ビッ
                          ト




             おすすめ 565
Bmp.recycle();で解放宣言


               GC対象にな
               り易くする
参照をnullにする


これをやらないと
Activityが解放されない
かもしれない。
Activityが消えない例
// ダメなプログラム
Drawable mDrawable;
@Override
Public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         ImageView imageView = new ImageView(this);
         if(mDrawable == null) {
                 mDrawable = this.getResources().getDrawable(R.drawable.hoge);
         }                                                     実は内部で
         imageView.setImageDrawable(mDrawable);          mDrawable.setCallback(i
         setContentView(imageView);                        mageView)になって
}                                                                 る!

                                            ImageView
                                                          Activityからの参照が消え
                                                                   ても
           Activity                                      ImageViewからの参照が残
          (Context)                                               るので、
                                            Drawable      Activityが消えない
Drw.setCallback(null);
Drawable mDrawable;
@Override
Public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         ImageView imageView = new ImageView(this);
         if(mDrawable == null) {
                 mDrawable = this.getResources().getDrawable(R.drawable.hoge);
         }
         imageView.setImageDrawable(mDrawable);
         setContentView(imageView);
}

// 解放する
@Override
Public void onStop() {
         super.onStop();
         mDrawable.setCallback(null);
}
mContextに気をつけろ
• あなたの作ったクラスでContextを扱う必
  要がある場合
 – できるだけメンバ変数では持たないようにす
   る
 – onStopとかでmContext = null;をする
まとめ
• いつの間にか無駄な読み込みがされない
  ように気をつけよう。
• mContextを持つのは若干危険だから気を
  つけよう。
時間があったら読むといいよー
• Android4.0のソース
  – https://github.com/naosim/android-15/
• ImageView
  – https://github.com/naosim/android-
    15/blob/master/android/widget/ImageView.java
  – 351行, 597行
• Button
  – https://github.com/naosim/android-
    15/blob/master/android/widget/Button.java

More Related Content

PDF
Canvas勉強会
PDF
HTML5のCanvas入門 - Img画像を編集してみよう -
PDF
㉗HTML5+jQueryでお絵かき
PDF
introduction to Marionette.js (jscafe14)
PDF
新版 OutOfMemoryErrorを知る
PPTX
初めてのAndroid開発
PDF
Tokyo GTUG Bootcamp2010
PDF
アプリリリース後に後悔しないための20のこと
Canvas勉強会
HTML5のCanvas入門 - Img画像を編集してみよう -
㉗HTML5+jQueryでお絵かき
introduction to Marionette.js (jscafe14)
新版 OutOfMemoryErrorを知る
初めてのAndroid開発
Tokyo GTUG Bootcamp2010
アプリリリース後に後悔しないための20のこと

Similar to 勉強会資料Out ofmemory (20)

PDF
Android Lecture #04 @PRO&BSC Inc.
PDF
Android4.2徹底解剖!
PDF
Android gameprogramming
PDF
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
PPT
Android Hacks - 合宿 Activity
PDF
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
PDF
Android api-levels
PPTX
0720 abc seminar
PDF
How to improve performance
PDF
函館IKA ICS開発情報
PPTX
Using the Fragments(Android)
PDF
ABC2016Spring Androidアプリ実装アンチパターン(暫定)
PDF
Android Lecture #03 @PRO&BSC Inc.
PPS
專訪李光耀
PDF
Android0422
PPT
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
PDF
みゆっき☆Think#3 「androidに触ってみるよ!」
PDF
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
PPTX
AI画像認識アプリ.pptx
PDF
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Android Lecture #04 @PRO&BSC Inc.
Android4.2徹底解剖!
Android gameprogramming
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
Android Hacks - 合宿 Activity
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
Android api-levels
0720 abc seminar
How to improve performance
函館IKA ICS開発情報
Using the Fragments(Android)
ABC2016Spring Androidアプリ実装アンチパターン(暫定)
Android Lecture #03 @PRO&BSC Inc.
專訪李光耀
Android0422
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
みゆっき☆Think#3 「androidに触ってみるよ!」
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
AI画像認識アプリ.pptx
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Ad

勉強会資料Out ofmemory