Started Service
시작된 서비스란 다른 구성요소가 startService()로 서비스를 호출하고, 서비스는 onStatCommand()에서 백그라운드 작업을 수행하는것을 말한다.
서비스가 시작되면 서비스만의 생애주기를 가지며, 백그라운드 작업은 무기한 실행될 수 있다. 해당 서비스를 호출한 구성요소가 소멸되어도 무관하며, 서비스를 종료시킬 때는 stopSelf()를 호출하여 종료시키거나 다른 구성요소가 stopService()를 호출하여 종료시킬 수 있다.
어플리케이션의 구성요소(액티비티)가 서비스를 시작하면서 intent를 전달하여 데이터를 전달할 수 있다. 서비스는 onStartCommand()에서 수신받는다.
시작된 서비스는 Service와 IntentService 두 가지 클래스를 확장하여 만들 수 있다.
1.IntentService
-Service의 서브클래스이며 작업자 쓰레드를 생성하여 서비스에 모든 요청된 작업을 하나씩 처리한다. 서비스가 여러개의 요청을 동시에 처리하지 않아도 될 때 좋은 방안이다. onHandleIntent()에서 시작 요청에 대한 인텐트를 수신하여 코드를 작성하면 된다.
-onStartCommand()에 전달된 모든 인텐트를 실행하는 작업자 쓰레드를 생성한다.
-한 번에 인텐트를 하나씩 onHandleIntent()의 작업 큐에 전달하므로 멀티 쓰레딩 환경에서 안전하다.
-모든 시작 요청이 끝나고 서비스가 알아서 종료되므로, stopSelf()를 호출할 필요가 없다.
-onBind()의 기본을 제공하며 null을 반환하도록 한다.
-onStartCommand()를 반드시 구현해야 하며 슈퍼 구현 또한 반드시 해야 한다.(그래야 인텐트를 onHandleIntent에 전달)
2.Service
-모든 서비스의 기본 클래스이다. Service 클래스를 확장할 때는 서비스의 모든 작업을 수행할 새 스레드를 만드는것이 중요하다. 서비스가 애플리케이션의 기본 스레드를 사용하므로 서비스 작업으로 인해 성능 저하 이슈가 있을 수 있다.
-IntentService를 확장하여 구현하면 서비스 자체가 단순해지지만, 서비스가 멀티 쓰레딩을 처리해야하는 경우 수신된 인텐트들을 구현할 수 있다.
-onStartCommand() 는 상황에 맞는 상수를 리턴해야 한다.
'프로그래밍 > Android' 카테고리의 다른 글
RecyclerView의 ViewHolder가 wrap_content만 적용될 때 (0) | 2020.12.19 |
---|---|
안드로이드 서비스 (1) (1) | 2019.02.18 |
액티비티 재생성 (0) | 2019.02.16 |
안드로이드 액티비티 생명주기 (0) | 2019.02.16 |
안드로이드 Notification (0) | 2018.12.07 |
dp/dip/sp/px 단위와 멀티해상도 (0) | 2018.12.07 |