오래 걸리는 작업을 백그라운드에서 처리할 수 있게 해주는 컴포넌트
class MyService: Service() {
override fun onBind(intent: Intent): IBinder? {
return null
}
}
서비스를 실행하려면 시스템에 인텐트를 전달해야 하는데, startService()와 bindService()를 사용한다.
val intent = Intent(this, MyService::class.java)
startService(intent)
...
stopService(intent)
위 함수로 서비스를 실행하려면 ServiceConnection 인터페이스를 구현한 객체를 준비해야 한다.
val connection: ServiceConnection = object : ServiceConnection {
// bindService() 함수로 서비스를 구동할 때 자동으로 호출
override fun onServiceConnected(name: ComponentName?, service: IBinder?) { }
// unbindService() 함수로 서비스를 종료할 때 자동으로 호출
override fun onServiceDisconnected(name: ComponentName?) { }
}
val intent = Intent(this, MyService::class.java)
// 서비스 실행
bindService(intent, connection, Context.BIND_AUTO_CREATE)
...
// 서비스 종료
unbindService(connection)
세 번째 매개변수는 Int 타입의 flags이다. 대부분 Context.BIND_AUTO_CREATE 로 지정한다.
이는 서비스가 실행 상태가 아니더라도 객체를 생성해서 실행하라는 의미이다.
왼쪽은 startService(), 오른쪽은 bindService() 함수를 호출했을 때 서비스의 생명주기이다.
서비스 객체 생성 이후 startService() 함수를 호출하면 onStartCommand() 함수만 다시 호출된다.
서비스 객체 생성 이후 bindService() 함수를 호출하면 onBind() 함수만 다시 호출된다.