あなたがしていることが「重い」場合は、スレッドでそれを行う必要があります。独自のスレッドで明示的に開始しない場合は、メイン(UI)スレッドで実行されます。これは、ユーザーによるインターフェイスの応答が不安定または遅いために目立つ場合があります。
興味深いことに、スレッドを使用している場合は、開始している作業スレッドとメインスレッドの間の通信手段としてハンドラーも使用すると便利なことがよくあります。
典型的なスレッド/ハンドラーの相互作用は次のようになります。
Handler h = new Handler(){
@Override
public void handleMessage(Message msg){
if(msg.what == 0){
updateUI();
}else{
showErrorDialog();
}
}
};
Thread t = new Thread() {
@Override
public void run(){
doSomeWork();
if(succeed){
//we can't update the UI from here so we'll signal our handler and it will do it for us.
h.sendEmptyMessage(0);
}else{
h.sendEmptyMessage(1);
}
}
};
ただし、一般的に、長時間実行または非常に集中的な作業(つまり、ネットワーク、ファイルIO、重い算術など)を実行するときは、いつでもスレッドを使用する必要があります。