はじめまして。若手ブログ初投稿のmaruyama-rです(twitter:@h13i32maru) 「Android2.3 - Gingerbreadをさくさく使うためのサンプルとテクニック - 」を本書レビュワーのnakazawa-kさんに貸していただいたので、僕が気になったところをピックアップして感想なんかを書いてみます。 まずこの本はAndroid2.3で追加/改善された機能の話なので今からAndroidを勉強しようとしている人向けというよりはある程度開発してきてAndroid2.3でどう変わったのかなーと気になってる人向けです。 各章は「機能の概要」と「実際のコード」で構成されています。なのでどんな機能が追加されたのかをさっと知りたい人は概要だけを、詳しく読んでみたい方はコードも合わせて読んでみるというのが良いと思います。 (僕は機能の概要だけをさらっと読んだ感じです) それでは僕が気になったところを書いていきます。

NFC

Android2.3でNFCに対応しました。NFCとはNear Field Communicationの略で近距離無線通信の規格だそうです(僕はこの本を読むまでぜんぜん知りませんでした)Android2.3ではこのNFCの規格に対応しており、NFCに対応した非接触ICカードから情報を受信したり送信したりできます。 NFCではNDEF(NFC Data Exchange Format)というNFCで使用するデータフォーマットが定義されています。このNDEFにはテキストを保持するのやURI保持するものなどいろいろあるようですが、それを解析するためのクラスは用意されていないようです。。ただAndroidSDK付属のNFCDemoにはそのサンプル実装があるので参考にすることができます。 注意としてはFeliCaはこのNDEFを使っていないので独自の実装が必要になるようです。 このNFCの章にのってるサンプルコードを理解するにはNFCの仕様をある程度しってないと難しいのかなという印象です(´・ω・`)でもNFC楽しそうですね!端末をさっとかざすだけでプロフィール交換やゲームのアイテム交換とかできそうですね!Suicaから乗車履歴をとってソーシャルゲーム等の進行に影響させたりもできるかも。

DownloadManager

大きなファイルをHTTP経由でダウンロードする場合に2.3から追加されたDownloadManagerを使うとすごく便利そうです。2.2以前なら自前でDefaultHttpClientなどを使って実装が必要だったことがDownloadManagerにお任せでできるようです。 ただ、中断やレジュームなどの処理方法が書かれていないのが残念です。developer.android.comのDownloadManagerを見ても中断やレジュームについては書かれていないようなので、まだ実装されていないのかも知れないです。。

Strict Mode

Strict Modeを使うとANR(Application Not Responding)の発生を開発者が検知しやすくなります。ANRとはユーザの入力に対し、アプリが何の応答もしないまま一定時間すぎてしまった状態をします。Androidでは「ユーザからの入力イベントの応答に5秒以上かかった場合」などに発生します。 Strict Modeを有効にするとANRが発生しそうな処理を実行するとエラーのダイアログやログを出力してアプリケーションを終了させることができます。これによりどこでANRが発生しそうなのかを開発者が知ることができます。 Strict ModeにはANRの検知対象を設定するためいくつかのポリシーがあります。ディスクの読み書きやネットワークアクセスなど開発者が自由にポリシーを設定することができます。 Strict Modeを有効にする方法は任意のActivityで以下のようなコードを実行します。このコード以降でStrict Modeが有効になるのでなるべく早い段階で有効にするほうが良いようです。

public void onCreate(Bundle savedInstanceState) {
  StricMode.enableDefaults();
super.onCreate(savedInstanceState);
}
それと注釈にあった「Honeycombからはメインスレッドでのネットワーク処理の実装はFatalとなり、コンパイル時に検知できるようになる予定です。」というのが凄く驚きです!思い切ったことをやるんだなと思いつつ、どうやってメインスレッドからの実行なのか判定してるのかも興味があるところです。 ユーザへ良いレスポンスを返すことにプログラム的に支援をしたり制限を加えることでAndroidアプリ全体の質を向上させることができると思うので、このStrict Modeは是非つかっていきたいですね。前述のDownloadManager、Service、AsyncTask、Thread/HandlerなどUIスレッド以外での処理方法がいくつも提供されているのでこれらを使えばそんなに難しくなくできると思います。

その他

  • OBB(Opaque Binary Blob)による暗号化ディスクイメージ
  • Native ActivityによるC/C++だけでのAndroidアプリ開発
  • Dalvik RuntimeのJIT改善とJRE6対応
  • Media Provider / Speech Recognitionによる音声のテキスト化
など面白い話がたくさん載っているのでAndroid2.3はどんな風に変わったのか気になっている方は是非読んでみることをお勧めします これを読むと2.3な端末がほしくなりますね(・∀・) おわり