LoginSignup
2
6

More than 3 years have passed since last update.

[Android] ServiceとIntentServiceの違い

Posted at

Serivce

Serviceについては以前触れたので、こちらの記事を参照願いたい。

・Service
https://qiita.com/QiitaD/items/5c313076b7b99823ce1a

・IntentService
https://qiita.com/QiitaD/items/96e70cd189d0c4385393

終了方法

Serviceは終了するときにStopService()かstopSelf()を明示的に書かなければ終了しない。しかし、IntentServiceの場合はそれをする必要がなく、処理が終わったら自動的に終了してくれる。

スレッド

ServiceはActivityと同じUIスレッド(メインスレッド)で動いているが、IntentServiceはメインスレッドとは別のスレッド(内部のHandlerThread)で動いている。

そのため例えば、HTTP通信をServiceに任せる時、IntentServiceは非同期処理に向いているので通信できる。しかしServiceクラスで行おうとすると「NetworkOnMainThreadException」が発生する。

またIntentServiceはUIスレッドで動いていないので、Viewを操作できない。(BroadcastReceiverやCallBackを使わなければならない。)
ネットに転がっているサンプルにはToastをプログラム内に組み込んでいるものもあったが、Toastも出なかった。(Handler使えば可能になるという記事もあった https://qiita.com/wakwak/items/5a03127aba3effa845f8)

感想

非同期処理関連はService以外にもAsyncTaskがあるのでかなり厄介に感じた。向いてないクラスを使うと、品質を落としかねないので気を付けたい。

参考URL

・Android 非同期処理についてまとめるメモ
https://qiita.com/tk_daze/items/bc83c69750e5f2e4015c

・IntentService と Serviceの違い
https://oc-technote.com/android/intentservice%e3%80%80%e3%81%a8%e3%80%80service%e3%81%ae%e9%81%95%e3%81%84/

2
6
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
2
6