Android アプリケーション高速化テクニック

組込プレス Vol.16 の特集を久々に目を通してみたんですが、内容に今更ですがタマゲました。ただ、この手法は Java アプリの高速化テクニックそのもの、という記述もある。むむむ。

高速化の手法

とりあえず以下に列挙してみます。なかなか凄い。

インスタンス生成の抑制

生成したインスタンスはプールしといて再利用せよ、との事。おそらくこの手法は Android がアプリケーションというリソースを管理するための手法になってるのだろうと類推。
アプリケーション終了しても当分は活きておられます (というか onDestroy 呼ばれない) ので。
てーかアプリの場合は初期化もしないというアレっぷりだなw
あまり見た記憶は無いですが、滅多やたらにオブジェクトを生成するような実装の場合には、リソースを自分で管理する方式を選択した方が良いのでしょうか。

ローカル変数へのキャッシュ

ループ終了判定でのメソド呼び出しは勿体無いオバケが出るとの事。
富豪プログラミングはステ、って事ですかそうですか。

インスタンス変数のキャッシュ

インスタンス変数の参照も最小限に抑えなさい、との事。
インスタンス変数の参照や格納などの命令ではインスタンスが null かどうか、などのチェックが毎回実行されるらしく (しかも実行負荷が高い模様)、何度も参照したり代入したりするのであれば、ローカルな変数でヤれば実行負荷を下げる事ができるとの事。

スタティックメソッドの活用

インスタンスメソッドよりもスタティックメソッドの方が実行負荷が低い模様。

浮動小数点演算は極力使用しない

これはなんとなく理解できます。

数は static final で定義する

こうすると定数扱いに翻訳される模様。逆に final 付けないとアクセスの度にそのフィールドへのアクセスが必要になるためオーバーヘッドが大きい、と。

ポリモーフィズムの使用を控える

オーバーヘッドの問題。

オブジェクト指向プログラミングを止める

絶句。まぁ前の項目見た時点で予測ができると言えばそうなんですが。

  • インスタンスへのアクセスは減らせ
  • メソドはインライン展開せよ

生産性はオチるけど、_余計な_オーバーヘッドが減るので速度は向上するとの事。

Android アプリケーション描画の高速化

Canvas 使うな SurfaceView 使え、との事。ちょっとここは具体的な方法について確認が必要。

いやはや

確かにリソース気にするならオブジェクト指向は敵ですな。だったら何故に java なんだ、って話ではあるのですが、Android なレイヤでどの程度高速化を見据えた実装になってるか、について着目して中身を見てみるのも面白いかもしれません。
しかし、オブジェクト指向はステ、ってのは色々な意味で凄いな。