はじめに
Androidの実装においてスレッド処理の方法が沢山あるので調べてみました。
それぞれの概念を簡単にまとめました。
ThreadとRunnnableの違い
TheadとRunnableはJavaが提供する機能
スレッドで動作するメソッドを作るには_スレッド化したいクラスにThreadクラスを継承させる_必要がある。
しかし既に他のクラスを継承しているクラスがあった場合はTheadクラスを継承できない。
なので代わりにRunnableをimplementsして使う。
Handler(とLooper)
Handler(とLooper)はAndroidが提供するスレッド間のやり取りを行う機能(スレッド機能ではない)
AndroidのUIはメインスレッド以外のスレッドからアクセスされると例外が発生して落ちる。
別スレッドからメインスレッドへの橋渡しをするためにHandlerを使用する事が出来る。
別スレッドから別スレッドに橋渡しをするためにはHandlerに加えてLooperが必要になる。
メインスレッドに橋渡しするのにLooperは必要ない、何故ならメインスレッドは既に内部でLooperを持っているため。
HandlerTask
HandlerTaskはAndroidが提供する機能、JavaのTheadを拡張したクラス。
生成時にLooperを自動的に用意してくれる。
Handlerを使ってスレッド間でデータのやり取りが出来る様になる。
AsyncTask
AsyncTaskはAndroidが提供する機能
別タスクでUIに対する処理を行うことができる。
最大の特徴は「非同期処理中であってもメインスレッドでの処理が可能」なところ(Handlerを使わなくてよいという事)
但し短い時間で完了する処理しか使えない。