서비스

k_hyun·2023년 3월 9일
0

서비스

오래 걸리는 작업을 백그라운드에서 처리할 수 있게 해주는 컴포넌트

class MyService: Service() {
	override fun onBind(intent: Intent): IBinder? {
    	return null
    }
 }

서비스를 실행하려면 시스템에 인텐트를 전달해야 하는데, startService()와 bindService()를 사용한다.

startService()

val intent = Intent(this, MyService::class.java)
startService(intent)
...
stopService(intent)

bindService()

위 함수로 서비스를 실행하려면 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() 함수만 다시 호출된다.

0개의 댓글