Androidの非同期処理 Androidはシングルスレッド云々 なので、ユーザー操作を邪魔してだめ よって、時間の掛かる処理は必ず別スレッドで処理云々。 ググると何だかいろいろ出てくる。 関連キーワード Service, IntentService, HandlerThread, looper, handler, thred, AsyncTask, Message, Runnable, RxJava javaのスレッドの知識はあったんだけど何だか雑雑して理解が出来ない。上記キーワード間の関連が全然分からないので整理した。 ThreadからHandlerThreadへの変遷 まずはThread, Looper, Handler, HandlerThread, Message, Runnableこの変の話。 シングルスレッドのAndroidではメインスレッドで重い処理してはだめ そうだ!スレッド使おう 従来のスレッドだと連続利用するのに不便 毎回インスタンス作成だとオーバーヘッドかかる コールバック処理当の記述も煩雑 そうだ!スレッドにqueを実装してタスクがくれば処理できるような仕組みにしよう Looperの誕生 スレッドにLooperを追加することで繰り返し利用が可能に どうやってスレッドにタスクを渡すの? Handlerの誕生 Handler経由でMessageやRunnableをThreadに渡す なんか雑雑してない?もっとエレガントにしない? HandlerThreadの誕生 だいたいこういう流れだと思う。実際はHandlerThreadを使うことが多いのだと思う。 関係性 スレッド <-> ルーパー <-> ハンドラー メインスレッドはデフォルトでルーパーを持つ。他のスレッドもルーパー設定可能。 ハンドラーはnewするときにルーパーを指定する。 ルーパーはque。 queにjobを追加するのはハンドラー。 スレッドとルーパは1対1、しかしルーパとハンドラーは1対多。 用例 なぜかHandlerThread を継承してクラス作ってる例がほとんどない。 そして、HandlerにhandleMessage()書くのが気持ち悪い。 ...