Androidアプリ開発をしていて以下のようなログが出たときの原因と対処法を紹介します。

I/Choreographer﹕ Skipped 996 frames! The application may be doing too much work on its main thread

UIのスレッドの処理時間が長いと処理が打ち切られてログが出力される

どうやらUIのスレッド上の処理時間が長いと、途中で処理が中断されてこのログが出力させるようです。私の場合はActivityのonCreate関数内で1分ぐらいかかる長い処理をさせていたら、このログが出力されて処理が中断されていました。

これはAndroidの設計方針として、UIのスレッド上で時間のかかる処理をすると画面が固まったように見えてるため、時間のかかる処理は行ってはいけないようです。当然と言えば当然のことでありますが、よくハマってしまいます・・・

別スレッドを呼び出して非同期で処理をすることで解決する

時間のかかる処理をAsyncTask等の別スレッド作りUIのメインスレッド外で実行するように変更することで対処できます。

例)

public class xxActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    (new Thread(new Runnable() {
      @Override
      public void run() {
         //ここで処理時間の長い処理を実行する
      }
    })).start();
  }
}