【Android】サービス ~ 入門編 ~

■ はじめに

 Android にも、サービスっていう
Windows で言えば、 Windowsサービス、
Linux で言えば、デーモンのように
バックグラウンドで動くような仕組みがある。

今回は、サービスについて、学ぶ。

目次

【1】Android の 非同期処理種類

【2】Android の サービス開始方法
 1)フォアグラウンド サービス
 2)バックグラウンド サービス
 3)バインドされたサービス
 ※ 使用上の注意(制限事項)

【3】サービスの各種イベント
 1)onCreate()
 2)onStartCommand()
 3)onDestroy()
 4)onBind()

【1】Android の サービス種類

1)Service
2)IntentService

https://qiita.com/tk_daze/items/bc83c69750e5f2e4015c
https://qiita.com/QiitaD/items/e76ab92d478977d8a932
http://javait.hatenablog.com/entry/2015/12/16/003246

1)Service

* Activityと同じスレッド(メインスレッド)と同じスレッドで動いている
 => 画面操作可能
 => 重い処理をすれば、UI操作にも影響を及ぼす

2)IntentService

* メインスレッドとは別スレッドで動いている

【2】Android の サービス開始方法

* Android の サービス開始方法は、以下の3通り。

1)フォアグラウンド サービス

* startForegroundService() を使用
* Android Oreo(8.0 / API Level 26)から。

2)バックグラウンド サービス

* startService() / stopService() を使用
* 起動後、ActivityからServiceを制御できない
* Activityに依存しない(アプリ終了してもサービス停止しない)

3)バインドされたサービス
https://developer.android.com/guide/components/bound-services?hl=ja

* bindService() / unbindService() を使用
* 起動後、ActivityからServiceを制御できる
* Activityに依存する(コネクションが切断されるとサービス停止)

※ 使用上の注意(制限事項)

Android Oreo(8.0 / API Level 26)から、
サービスによる端末のリソース消費などにより、サービスには制限がある

https://developer.android.com/about/versions/oreo/background?hl=ja
https://developer.android.com/guide/components/activities/background-starts?hl=ja

* バックグラウンド アプリがユーザーの現在地を取得する回数を制限される
 => フォアグラウンド サービス には、制限なし

https://developer.android.com/about/versions/oreo/background-location-limits?hl=ja

【2】サービスの各種イベント

1)onCreate()

* サービス作成時
 => 初期化処理に使える

2)onStartCommand()

* サービス実行時
# onStartCommand()の戻り値 説明
1 START_NOT_STICKY 強制終了した場合、サービス再起動しない
2 START_STICKY 強制終了した場合、自動的にサービス再起動
3 START_REDELIVER_INTENT 2と同じ。違うのはm終了前のintentが保持されていてonStartCommandに再度渡される
4 START_STICKY_COMPATIBILITY 強制終了した場合、自動的にサービス再起動するが保証はされない

https://developer.android.com/guide/components/services?hl=ja#ExtendingService
https://www.atmarkit.co.jp/ait/articles/1204/20/news140.html
http://yuki312.blogspot.com/2012/07/androidserviceonstartcommand.html
https://tech.nosuz.jp/2016/12/android-service-onstartcommand/

3)onDestroy()

* サービス終了時
 => 後処理に使える

4)onBind()

* bindService()で呼び出し時

参考文献

公式サイト
https://developer.android.com/guide/components/services?hl=ja

関連記事

サービス ~ 基本編 / Back/Foreground Service ~
https://dk521123.hatenablog.com/entry/2020/08/03/000000
サービス ~ 基本編 / Bind Service ~
https://dk521123.hatenablog.com/entry/2020/08/04/000000
ダイアログ表示 ~ 基本編 / Notification(通知) ~
https://dk521123.hatenablog.com/entry/2020/08/01/000000
アラーム機能を実装するには
https://dk521123.hatenablog.com/entry/2020/07/14/000000
Kotlin / Realm で英単語帳を作る
https://dk521123.hatenablog.com/entry/2020/07/20/232009