Java

他のページを見る

iアプリ開発のツボ

ここでは私がiアプリを作ったときに気付いたことを書いていきます。

クラスをできるだけ少なくする

iアプリ全体のサイズは 10Kbyte に制限されています。サイズを減らすための色々な方法が雑誌などでも紹介されていますが、私の結論は、

クラスの数を減らすのが一番効く

という事です。具体的な方法としては、

クラス、データ、メソッドの名前を短くしたりしてもほとんど効果はありませんが、クラスを1つ減らすと 100Kbyte 単位でサイズを減らすことができます。

GIF画像の圧縮

まあこれは色を16色に減色してノン・インタレースにするだけです。

サイズ減らしの細かい技

これらの技は使うとコードが見辛くなってしまうので、開発の最終段階まではやらないほうが無難です。

GUI部品の動的な変更

iアプリの GUI コンポーネントでは AWT や Swing と同様に動的にラベルやリストの内容を変更することができます。単語帳では ListBox や Label の内容をユーザの操作に応じて変更しています。例えば単語帳の「リストをロード」ボタンを押すとサーバーから単語帳のリストがダウンロードされて単語帳リストに単語帳が追加されます。

こういった場合に問題になるのが、GUI 部品のレイアウトを決定しているレイアウトマネージャの選択肢が標準のもの1つしかないことと、その標準のレイアウトマネージャの挙動を制御する事ができない事です。

そんな場合、以下の様な方法で標準のレイアウトマネージャの挙動をある程度制御できます。

端末によって動作が違う!!

実は私はiアプリ端末をもっていません。そこで会社の先輩や同期の友人に頼んでテストしてもらったのですが(パケット料返せという意見もありますが)、そこで端末によってJavaの動作が違うことが発覚しました。例えば、

Panel と GUI コンポーネントを使っている場合、Panel に対する KeyListener で、

N503i
上下左右のキーイベント(KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT)を扱えない
F503i
キーイベントを扱える

この場合は操作を別のキーに割り振ることで問題を回避しました。

個人での開発ではテストはどうしてもエミュレータ頼りで実機のテストは少なくなりがちなので発表してから問題が発生してしまう可能性があります。

また端末によっては .jam ファイルに書かれているパラメータの順番が期待通りでないとダウンロードに失敗する場合があるようです。

ShortTimer と resume()

iアプリは電話の着信があると一度停止状態になり、通話が終わると resume されます。その時以下のいずれかのイベント処理でアプリの resume を行う必要があります。

その時問題になるのがリアルタイム処理に用いる ShortTimer の扱いです。停止されたときのタイマーの状態が分からないので、start(), stop() のどちらを呼べばよいのかが分からないためです。この場合まずは dispose() を呼んでタイマーを破棄して新規に getShortTimer() でタイマーを生成すれば問題ありませんでした。


このページに関するご質問はこちらへどうぞ。