マルチスレッド処理の実装方法|Android開発
Androidでのマルチスレッド処理メモ。
色々と手段があるので使ったことがあるものをメモっとく。
都度スレッド起動
これはAndroidというかJavaの方法です。
private class ExRunnable implements Runnable {
@Override
public void run() {
// 処理
}
}
new Thread(new ExRunnable()).start();
Handler.post() 使用
private android.os.HandlerThread mBackgroundThread;
private android.os.Handler mBackgroundHandler;
// スレッドの起動. onResume()などで行う.
mBackgroundThread = new android.os.HandlerThread("Background");
mBackgroundThread.start();
mBackgroundHandler = new android.os.Handler(mBackgroundThread.getLooper());
// スレッドの停止. onPause()などで行う.
mBackgroundThread.quitSafely();
try {
mBackgroundThread.join();
mBackgroundThread = null;
mBackgroundHandler = null;
} catch (InterruptedException e) {
e.printStackTrace();
}
インライン展開
mBackgroundHandler.post(new Runnable() {
@Override
public void run() {
// 処理
}
});
実行オブジェクト指定
private class ExRunnable implements Runnable {
@Override
public void run() {
// 処理
}
}
mBackgroundHandler.post(new ExRunnable());
runOnUiThread
Activity.runOnUiThread();
Hander.post()
と似た処理。
但し、自身が UI スレッドなら即実行する。その場合、run()
が実行されるため、処理終了まで待つ。
Thread.start()
は別スレッド実行だが、Thread.run()
は関数コールの動作になる。修飾子
volatile 変数
書込みが少なく、読込が多い場合のみ有効な使い方となる。