StrictModeでパフォーマンスをチューニングする

Gingerbreadの新機能の一つとして「StrictMode」が導入されましたので、実際に使用して検証してみました。

StrictModeとは?

  • アプリケーションの動作をもっさりさせる原因となる、 ディスクやネットワークへのアクセスを検知するための仕組み。
  • 「スレッドや仮想マシンのポリシー」という形で、何を検知するかを決めることができます。
  • デフォルトでは下記のようなものが検知できます。
    • ディスクの読み込み、書き込み
    • ネットワークの使用
    • 違反:ログ、クラッシュ、dropbox、邪魔なダイアログ
  • 検知は、ディスク(java.io.*, android.database.sqlite.*, etc)やネットワーク(java.net.*)をフックすることで行われます。

StrictModeの利点

  • パフォーマンスの劣化につながる要素(ディスクアクセス、ネットワークアクセス、データベースカーソルのリークなど)を特定することができます。
  • 特定した結果をlogcatで表示することができ、特殊なログ解析ツール等は不要。
  • 次期バージョン「Honeycomb」ではメイン(UI)スレッドでネットワークのリクエストを行うとfatalエラー(例えターゲットがHoneycomb以前だとしても)となります。したがって、StrictModeは次期バージョンへアプリを対応させる上で、重要なツールとなります。

StrictModeの欠点

  • パフォーマンスを劣化させる全てを検知できる訳ではない。
  • 正常なアクセスもポリシー違反として検知されることがある。
  • 将来において、より多くの種類の検知を行うようになるため、リリース時には手動で無効化しておく手間がかかる。

StrictModeの使いどころ

  • ユーザエクスペリエンスに問題がある(もっさりしすぎている)と感じた場合にのみ、使うと良いです。
  • 将来的にはコンパイルエラーを特定するためのツールの一つになる可能性があります(UIスレッドでアクセスしている部分の特定など)。
続きを読む