マルチスレッド処理|Android開発

      2017/02/09

マルチスレッド処理メモ。
色々と手段があるので使ったことがあるものをメモっとく。

都度スレッド起動

これは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 変数
書込みが少なく、読込が多い場合のみ有効な使い方となる

 - Android ,