HandlerとHanderThreadの違い
/*
HandlerThread + Handler を使って mainスレッドからワーカースレッド(main以外のスレッド)
を起動させる
*/
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 別スレッド生成 -> スレッド起動
HandlerThread handlerThread = new HandlerThread("other");
handlerThread.start();
// handlerThreadのLooperインスタンスを引数にしてHandlerインスタンス生成
Handler handler = new Handler(handlerThread.getLooper());
handler.post(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
// ワーカスレッド(重い処理を行わせる)
}
});
}
}
/*
Handler を使って mainスレッドからmainスレッドを起動させる
*/
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// mainスレッドでハンドラを使う
Handler handler = new Handler(); // 引数なしだとcurrent thread の Looperが指定される
// これでもOK
// Handler handler = new Handler(Looper.getMainLooper());
// mainスレッドのキューへRunnableを渡す
handler.post(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
// mainスレッド(UIスレッド)
}
});
}
}