ひつじのにっき

mhidakaのにっきです。たまに長文、気が向いたとき更新。

ADF2010 LT Android開発Tipsの中身+修正orz

Android Developers Forum 2010 in Osakaにて発表した内容をまとめました。

一部GCについて発表時の内容に誤りがありました。
お詫びします。信じた人すいません、嘘ついてましたorz
まとめ中で恐縮ですが、とりいそぎ訂正のため、内容を途中まで公開します!


ちなみに誤った部分は
ローカル変数がGCを走らせる要因と言ってしまっています。
正しくはオブジェクト生成時です。

  • 短いスコープの変数オブジェクト

if(DEBUG)によるデバッグ

よく使うデバッグ・プリントのTipsです。

  • Logクラスを利用。Android.util。EclipceではLogCatビューに表示される。

AndroidMarketで公開されているアプリケーションをUSBケーブルで繋ぐと
ログが垂れ流しのままだったことがあります。そんな状況を防ぐには
下記のようにすると幸せになれるかも。

>||java|
private static final boolean DEBUG = true;

if(DEBUG)Log.v("TAG","DEBUG NOW.");
|

GCを意識する

AndroidはDalvikバーチャルマシン上で動作します。
メモリ管理はGCに任されており、通常であれば
アプリケーションから意識する必要はありません。

しかしながらモバイル端末というバッテリ・CPUパワーが制限された
状況では、GCが走ると100ms〜数百ms応答が無くなることもあり、
少なからずAppからも意識しないといけないケースがあります。

  • Cから入った人は特に注意。
  • 短いスコープの変数オブジェクト

GCへの影響が多い例
>||java|
for(i=0;i<10;i++){
Integer n = new Integer();
n = xxx;
data[i] = n;
}
|

GCへの影響が少ない例
>||java|
Integer n = new Integer();
for(i=0;i<10;i++){
n = xxx;
data[i] = n;
}
|