<안드로이드/Android> 서비스(SERVICE) PART3

Posted by 앱해피
2015. 6. 17. 15:22 안드로이드 이론
스타티드(Started) 서비스 구현관련 내용

출처 : 안드로이드 개발자 홈페이지

 

Started 서비스 생성하기

 

Started 서비스는 startService() 메소드를 호출하여 시작할 수 있는 컴포넌트이며, 서비스의 onStartCommand() 메소드의 호출로 이어집니다.

서비스가 시작되면, 서비스는 자신만의 라이프사이클을 갖습니다. 서비스를 실행시킨 컴포넌트가 종료되더라도 백그라운드에서 계속 작동됩니다. 그렇기 때문에 서비스는 자신의 작업을 다 마무리 한 뒤, stopSelf() 메소드를 호출하여 종료될 수도 있고 또는 다른 컴포넌트에서 stopService()를 호출해서 종료 시킬 수도 있습니다.

 

액티비티와 같은 컴포넌트는 startService() 메소드를 호출해서 서비스를 시작시킬 수 있으며, 사용하고자 하는 서비스 정보와 서비스에서 사용될 데이터를 인텐트에 담아 전달할 수 있습니다.

 

[Service]

 

안드로이드에서 사용되는 모든 서비스의 기본의 되는 클래스입니다. 이 클래스를 상속받았을 때, 서비스의 모든 작업을 처리할 새로운 스레드를 생성하는 것이 중요합니다. 서비스는 기본적으로 어플리케이션의 메인 스레드를 사용하기 때문에, 이를 그대로 사용했다가는 앱에서 사용하는 액티비티의 속도가 느려질 가능성이 큽니다.

 

onStartCommand() 메소드는 정수값을 반환해야 합니다. 이 정수값을 어떻게 어떻게 설정하느냐에 따라서 시스템이 해당 서비스를 강제 종료했을 때, 서비스를 어떤 방법을 이용해서 다시 시작시킬지 결정할 수 있습니다. onStartCommand()는 아래에 나와있는 상수값 중 하나를 반드시 반환해야 합니다.

 

* START_NOT_STICKY

 

onStartCommand()에서 START_NOT_STICKY를 반환한 후에 시스템에서 해당 서비스를 강제종료 했다면, 이후 서비스는 다시 재생성되지 않는다. 이 옵션을 사용하면 더이상 필요하지 않은 서비스가 계속 작동되는 것을 막을 수 있다는 장점이 있다.

 

* START_STICKY

 

onStartCommand()에서 START_STICKY를 반환한 후에 시스템에서 해당 서비스를 강제 종료 했다면, 이후 서비스를 재생성해주고 이어서 onStartCommand()를 호출하게 한다. 하지만 서비스가 강제로 종료되기 전에 전달된 마지막 Intent는 다시 전달해주진 않는다.

 

* START_REDELIVER_INTENT

 

onStartCommand()에서 START_REDELIVER_INTENT를 반환한 후에 시스템이 해당 서비스를 강제 종료 했다면, 이후 서비스를 재생성 해주고 이어서 onStartCommand()를 호출하게 한다. 또한 서비스가 강제로 종료되기 전에 전달된 마지막 Intent를 다시 전달해주는 기능까지 포함한다.

감사합니다 ^_^