11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Android(java)のスレッド処理の覚え書き

Last updated at Posted at 2017-10-05

はじめに

Androidの実装においてスレッド処理の方法が沢山あるので調べてみました。
それぞれの概念を簡単にまとめました。

ThreadとRunnnableの違い

TheadとRunnableはJavaが提供する機能
スレッドで動作するメソッドを作るには_スレッド化したいクラスにThreadクラスを継承させる_必要がある。

しかし既に他のクラスを継承しているクラスがあった場合はTheadクラスを継承できない。
なので代わりにRunnableをimplementsして使う。

Handler(とLooper)

Handler(とLooper)はAndroidが提供するスレッド間のやり取りを行う機能(スレッド機能ではない)
AndroidのUIはメインスレッド以外のスレッドからアクセスされると例外が発生して落ちる。
別スレッドからメインスレッドへの橋渡しをするためにHandlerを使用する事が出来る。

別スレッドから別スレッドに橋渡しをするためにはHandlerに加えてLooperが必要になる。
メインスレッドに橋渡しするのにLooperは必要ない、何故ならメインスレッドは既に内部でLooperを持っているため。
android-thread-looper-handler.png

HandlerTask

HandlerTaskはAndroidが提供する機能、JavaのTheadを拡張したクラス。
生成時にLooperを自動的に用意してくれる。
Handlerを使ってスレッド間でデータのやり取りが出来る様になる。

AsyncTask

AsyncTaskはAndroidが提供する機能
別タスクでUIに対する処理を行うことができる。
最大の特徴は「非同期処理中であってもメインスレッドでの処理が可能」なところ(Handlerを使わなくてよいという事)
但し短い時間で完了する処理しか使えない。

参照: Androidのバックグラウンドを使いこなす Thread, Looper, Handler

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?