onCreateやonResumeでの重い処理はレスポンスを悪くします。
重い処理をバックグラウンドスレッドで行うのも手ですが、バックグランド処理の開始を
遅らせることで更にレスポンスを早くすることが可能です。
レスポンスを早くするには素早くUIを構築することです。
ここでのUIは"現在UIを構築中"であることを伝えるものかもしれませんし、
スタブライクなUIかもしれません。
UIを素早く構築するには、UI構築処理に集中しこれを邪魔しないことです。
バックグラウンドでデータベースアクセスをしたり、ネットワークリソースにアクセスす
ることもUIの構築完了まで我慢します。
簡単なサンプルコードを載せます。
private boolean mFirstDraw = true;
@Override
protected void onResume() {
super.onResume();
findViewById(R.id.hoge).getViewTreeObserver().addOnPreDrawListener(
new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
if (mFirstDraw) {
mHandler.sendEmptyMessageDelayed(WHAT, 1000);
mFirstDraw = false;
}
return true;
}
}
);
}
上記のコードではViewの計測と整列を終え、描画の直前状態をフックして初回描画時のタイミングから1000msec後にバックグラウンドスレッド処理を開始します。
こうすることで、Viewの描画が完了しUIの提供を終えた頃にバックグラウンド処理が開始
されるのでアプリケーションはUI構築に集中できます。
以上です。