[안드로이드] 컴포넌트 생명주기 - #2 서비스 생명주기

반응형



액티비티 생명주기에 이어 안드로이드의 두번째 컴포넌트인 서비스의 생명주기 입니다.
읽기전에 손가락 한번 클릭~ >_<

고마워요 ~ Chu ~ ♥



서비스 생명주기

서비스는 두 가지 방식으로 사용됩니다.

서비스 시작과 중지
서비스는 시작되어 중지되거나 스스로 중지할 수 있습니다.

서비스는 Context.startService()에서 시작되고 Context.stopService() 에서 중지됩니다.


또한, Service.stopSelf() 나 Service.stopselfResult()를 호출하여 스스로 중지할 수 있습니다.



startService() 의 호출횟수에 관계없이 stopService()는 한번만 호출하면 서비스는 중지됩니다.


서비스 인터페이스 사용
서비스는 인터페이스를 사용해서 사용될 수 있는데, 서비스 객체에 커넥션을 만들고 서비스 내부를 호출하는 구조입니다.
커넥션은 Context.bindService() 를 호출하여 만들어지고, Context.unbindService() 를 호출하여 끊어집니다.


여러개의 클라이언트가 동일한 서비스를 바인드 하는것도 가능합니다.

만약 서비스가 아직 실행전이라면 bindService() 메소드를 호출하여 액티비티가 그 서비스에 대한 커넥션을 만들게 할 수도 있습니다.



서비스 생명주기 메소드

서비스도 생명주기 메소드가 세 가지 있습니다.
[ 액티비티 생명주기 메소드와는 다르게 모두 public 입니다. ]

서비스 생명주기 메소드
⊙ void onCreate()
⊙ void onStart(Intent intent)
⊙ void onDestroy()





네스티드 루프

서비스 생명주기 메소드를 구현하면 아래와 같은 작업을 할 수 있습니다.

서비스 인타이어 라이프타임( entire lifetime )
onCreate() 메소드와 onDestroy() 사이에서 발생합니다.


서비스 액티브 라이프타임 ( active lifetime )
onStart() 가 호출되어 시작됩니다.
인텐트 객체( startService()메소드에 전달된 객체 ) 를 인수로 받습니다.


☞ 주의할점은 콜백 메소드, 즉 onStop() 같은 메소드는 없습니다. 서비스가 시작되는 메소드 ( Context.startService() ) 와 Context.bindService() 중 어느것에 시작되던 관계없이, 모든 서비스에서 onCreate() 와 onDestroy() 메소드는 호출됩니다.

만약, 서비스가 다른곳에서도 바인드 하는것을 허용한다면 추가적으로 메소드를 구현해야 합니다.
이 메소드들은
⊙ IBinder onBind(Intent intent)
⊙ boolean onUnbind(Intent intent)
⊙ void onRebind(Intent intent)




☞ onBind() 메소드에는 bindService() 메소드에 전달된 인텐트 객체가,
    onUnbind() 메소드에는 unbindService() 메소드에 전달된 인텐트 객체가 전달됩니다.

서비스가 바인드를 허용하면 onBind() 는 클라이언트와 서비스 사이에서 커뮤니케이션을 위해 사용할 채널을 리턴하는 구조입니다.



☞  서비스가 어느것에 의해 시작되던간에 , 서비스는 잠재적으로 클라이언트가 바인드하는것을 허용할 수 있기 때문에, 어떤 서비스이던지 onBind() 와 onUnbind() 를 호출 받을 수 있습니다.




관련글



반응형

댓글

Designed by JB FACTORY