■ はじめに
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