0
0

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 1 year has passed since last update.

自分用 Serviceについてまとめてみた

Last updated at Posted at 2023-12-12

自分用 Serviceの基本についてまとめてみた。

Serviceとは?

バックグラウンドで動作するコンポーネントであり、
アプリケーションのメインスレッドとは別のスレッドでタスクを実行できるようにします。

Serviceはバックグラウンドで動作するため、ユーザーインターフェースを持たず、他のアプリケーションコンポーネントとは独立して実行されます。

Serviceを活用した機能
①バックグラウンドでの音楽再生
②ファイルのダウンロード
③位置情報サービス

Serviceのライフサイクル

AndroidのServiceには、Activityのようなライフサイクルがあり、以下のメソッドで構成されています。
Serviceには2つの種類があり、それぞれ異なったライフサイクルのメソッドを持っています。
image.png

onCreate()

***呼び出しタイミング:***サービスが最初に開始されたときに一度だけ呼び出されます。
役割: サービスが最初に作成されたときに呼ばれ、初期化や一度だけ実行される初期設定のために使用されます。

どちらのライフサイクルでも最初に呼ばれるのが特徴です。


startService()の時のメソッド

onStartCommand(intent: Intent?, flags: Int, startId: Int): Int

***呼び出しタイミング:***サービスが開始されるたびに呼び出されます。
***役割:***バックグラウンドで実行されるタスクを開始します。
   
startService() メソッドによって開始されたときに実行されるメソッドです。


bindService()の時のメソッド

onBind(intent: Intent?): IBinder?

呼び出しタイミング: bindService() メソッドが呼ばれたときに呼び出されます。
役割: サービスがバウンドサービスとして開始されるときに、接続されるコンポーネントに
   IBinder(インターフェース)を提供します。

onUnbind(intent: Intent?): Boolean

***呼び出しタイミング:unbindService() メソッドが呼ばれたときに呼び出されます。
役割: サービスが接続を解除するときに必要な処理を行います。
   返り値は true なら onRebind が呼ばれ、false なら呼ばれません。


onRebind(intent: Intent?)

***呼び出しタイミング:bindService() メソッドが呼ばれ、前に unbindService() メソッドが
          呼ばれていた場合に呼び出されます。
***役割:***サービスが再度接続されるときの処理を行います。


onDestroy()

***呼び出しタイミング:***サービスがstopSelf メソッドや stopService メソッドによって
          停止されるか、システムによって強制的に停止されると呼ばれます。
***役割:***リソースの解放や終了処理を行うために使用されます。

どちらのライフサイクルでも最後に呼ばれるのが特徴です。

Serviceは2種類ある!

Serviceには、startService() で開始されるものと BindService() の2種類があり
UIに携わるかどうかで使用するServiceが変わります。

startService

startService() は、Androidアプリケーション内でServiceを開始するためのメソッドです。
これにより、サービスがバックグラウンドで実行されるようになります。

特徴

アプリケーションコンポーネントから独立して実行されます。

serviceの開始

serviceを開始するには、Intentを利用して実行します。

//Serviceを開始する簡単な例
val serviceIntent = Intent(context, SampleService::class.java)
startService(serviceIntent)

serviceの停止

Serviceが必要なタスクを完了した場合、Service自体が stopSelf() メソッドを呼び出して停止したり、アクティビティから stopService() メソッドを呼び出して手動で停止することがあります。

BindService

bindService() は、Androidアプリケーション内でバインドサービス(Bound Service)を
開始するためのメソッドです。

特徴

アプリケーションコンポーネントと双方向の通信を行って実行します。

serviceの開始

bindService() を呼び出すことで、バインドサービスとアクティビティの間に双方向の通信が確立されます。
bindService() の引数は
第一引数:バインドされるサービスのクラス
第二引数:ServiceConnection オブジェクト
     →サービスとアクティビティの間で通信するためのインターフェースが提供する
第三引数:バインド時の挙動を指定するフラグ。
     →Context.BIND_AUTO_CREATE を指定すると、サービスがまだ存在しない場合に
     新しいサービスの作成が自動的に行われます。

//サービスをバインドする例
val serviceIntent = Intent(context, SampleService::class.java)
bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE)

serviceの接続/切断時の処理

ServiceConnectionインターフェースを実装することで、サービスが接続されたときと
切断されたときの処理を指定できます。
onServiceConnected メソッドでは、サービスとの通信のために使用できる IBinder インターフェースが提供されます。

private val serviceConnection = object : ServiceConnection {
    override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
        // サービスに接続されたときの処理
        val binder = service as SampleService.MyBinder
        val boundService = binder.getService()
        boundService.doSomething()//バインドクラスのメソッドが使える
    }

    override fun onServiceDisconnected(name: ComponentName?) {
        // サービスが切断されたときの処理
    }
}

バインドサービスは主に、アクティビティがサービスに対してリクエストを送り、
サービスがそのリクエストに応答するような場面で活用されます。
例えば、音楽プレーヤーアプリのアクティビティが再生、停止などのコマンドを
音楽再生サービスに送る場面が考えられます。
※メディアの再生のやり方を近日公開します。

最後に

簡単にでしたがServiceについてまとめてみました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?