[안드로이드] 컴포넌트 생명주기 - #2 서비스 생명주기
- 프로그래밍 정보
- 2010. 8. 23.
반응형
액티비티 생명주기에 이어 안드로이드의 두번째 컴포넌트인 서비스의 생명주기 입니다.
읽기전에 손가락 한번 클릭~ >_<
고마워요 ~ Chu ~ ♥
서비스 생명주기
서비스는 두 가지 방식으로 사용됩니다.
▣ 서비스 시작과 중지
서비스는 시작되어 중지되거나 스스로 중지할 수 있습니다.
서비스는 Context.startService()에서 시작되고 Context.stopService() 에서 중지됩니다.
또한, Service.stopSelf() 나 Service.stopselfResult()를 호출하여 스스로 중지할 수 있습니다.
startService() 의 호출횟수에 관계없이 stopService()는 한번만 호출하면 서비스는 중지됩니다.
서비스는 Context.startService()에서 시작되고 Context.stopService() 에서 중지됩니다.
또한, Service.stopSelf() 나 Service.stopselfResult()를 호출하여 스스로 중지할 수 있습니다.
startService() 의 호출횟수에 관계없이 stopService()는 한번만 호출하면 서비스는 중지됩니다.
▣ 서비스 인터페이스 사용
서비스는 인터페이스를 사용해서 사용될 수 있는데, 서비스 객체에 커넥션을 만들고 서비스 내부를 호출하는 구조입니다.
커넥션은 Context.bindService() 를 호출하여 만들어지고, Context.unbindService() 를 호출하여 끊어집니다.
여러개의 클라이언트가 동일한 서비스를 바인드 하는것도 가능합니다.
만약 서비스가 아직 실행전이라면 bindService() 메소드를 호출하여 액티비티가 그 서비스에 대한 커넥션을 만들게 할 수도 있습니다.
커넥션은 Context.bindService() 를 호출하여 만들어지고, Context.unbindService() 를 호출하여 끊어집니다.
여러개의 클라이언트가 동일한 서비스를 바인드 하는것도 가능합니다.
만약 서비스가 아직 실행전이라면 bindService() 메소드를 호출하여 액티비티가 그 서비스에 대한 커넥션을 만들게 할 수도 있습니다.
서비스 생명주기 메소드
서비스도 생명주기 메소드가 세 가지 있습니다.
[ 액티비티 생명주기 메소드와는 다르게 모두 public 입니다. ]
서비스 생명주기 메소드는
⊙ void onCreate()
⊙ void onStart(Intent intent)
⊙ void onDestroy()
⊙ void onStart(Intent intent)
⊙ void onDestroy()
네스티드 루프
서비스 생명주기 메소드를 구현하면 아래와 같은 작업을 할 수 있습니다.
▣ 서비스 인타이어 라이프타임( entire lifetime )
onCreate() 메소드와 onDestroy() 사이에서 발생합니다.
▣ 서비스 액티브 라이프타임 ( active lifetime )
onStart() 가 호출되어 시작됩니다.
인텐트 객체( startService()메소드에 전달된 객체 ) 를 인수로 받습니다.
인텐트 객체( startService()메소드에 전달된 객체 ) 를 인수로 받습니다.
☞ 주의할점은 콜백 메소드, 즉 onStop() 같은 메소드는 없습니다. 서비스가 시작되는 메소드 ( Context.startService() ) 와 Context.bindService() 중 어느것에 시작되던 관계없이, 모든 서비스에서 onCreate() 와 onDestroy() 메소드는 호출됩니다.
만약, 서비스가 다른곳에서도 바인드 하는것을 허용한다면 추가적으로 메소드를 구현해야 합니다.
이 메소드들은
⊙ IBinder onBind(Intent intent)
⊙ boolean onUnbind(Intent intent)
⊙ void onRebind(Intent intent)
⊙ boolean onUnbind(Intent intent)
⊙ void onRebind(Intent intent)
☞ onBind() 메소드에는 bindService() 메소드에 전달된 인텐트 객체가,
onUnbind() 메소드에는 unbindService() 메소드에 전달된 인텐트 객체가 전달됩니다.
서비스가 바인드를 허용하면 onBind() 는 클라이언트와 서비스 사이에서 커뮤니케이션을 위해 사용할 채널을 리턴하는 구조입니다.
☞ 서비스가 어느것에 의해 시작되던간에 , 서비스는 잠재적으로 클라이언트가 바인드하는것을 허용할 수 있기 때문에, 어떤 서비스이던지 onBind() 와 onUnbind() 를 호출 받을 수 있습니다.
관련글
[안드로이드] 컴포넌트 생명주기 - #1 액티비티 생명주기
[안드로이드] 컴포넌트 #1 - 액티비티(Activity)
[안드로이드] 컴포넌트 #2 - 서비스
[안드로이드] 컴포넌트 활성화 - 인텐트(Intent)
[안드로이드] 액티비티와 태스크
[안드로이드] 런치 ( Launch ) 모드
반응형