2012-02-03
■【だいちゃんOFF】クックパッドさんに遊びに行ってきました!
ニコ生のだいちゃんのOFF会!ということでクックパッドさんに遊びに行ってきました。 会社のある白金台は落ち着いた場所でよかったです。 だいちゃんのプレゼンを聞いて、手作りの恵方巻きなどをいただきました。 冷蔵庫もいろんな種類のものがありましたw ニコ生でプログラミングプレゼンをしている人、 放送をしている人、 アプリのモックアップを作ってきている人、 京都から来た人、 CTOをやっているエネルギッシュな人、 フリーのエンジニア、 などなど、 来ている人は特徴がありました。 勉強会などの出会いの場は、やっぱり刺激を受けますね。
2012-02-02
■[android]Androidアプリ 次回起動 落ちる 原因 メモリリーク
//オープンソースのzxingを使ってAndroidアプリを作っているが、 //起動して、戻るボタンで終了して、また起動するとメモリが足りなくて落ちる。 //原因は、メモリリーク。 //viewは明示的に開放してあげる必要があるようだ。 //以下は解決方法。 //XMLのトップレベルのビューがこれだったので、 //allviewというidをつけておいて、これと子を解放する。 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/allview" > //javaのコード側でこの関数をonDestroy()内で呼ぶと、 //リークしないので次回起動時に落ちなくなった @Override protected void onDestroy() { //画像解放 cleanupView(findViewById(R.id.allview)); super.onDestroy(); } //関数定義 /** * 指定したビュー階層内のドローワブルをクリアする。 * (ドローワブルをのコールバックメソッドによるアクティビティのリークを防ぐため) * @param view */ public static final void cleanupView(View view) { if(view instanceof ImageButton) { ImageButton ib = (ImageButton)view; ib.setImageDrawable(null); } else if(view instanceof ImageView) { ImageView iv = (ImageView)view; iv.setImageDrawable(null); } else if(view instanceof SeekBar) { SeekBar sb = (SeekBar)view; sb.setProgressDrawable(null); sb.setThumb(null); // } else if(view instanceof( xxxx )) { -- 他にもDrawable を使用するUIコンポーネントがあれば追加 } view.setBackgroundDrawable(null); if(view instanceof ViewGroup) { ViewGroup vg = (ViewGroup)view; int size = vg.getChildCount(); for(int i = 0; i < size; i++) { cleanupView(vg.getChildAt(i)); } } } //参考 //日本Androidの会 https://groups.google.com/group/android-group-japan/msg/f385faf0ac47e291?pli=1&hl=ja








