Service vs IntentService


Service로는 불가능한데 IntentService로는 가능한 작업의 예시 좀 알려주실 수 있나요 (반대 상황도 포함)?

하나의 IntentService는 독립된 하나의 스레드에서 실행되며 Service는 그렇지 않다고 알고 있습니다. 그래서 Service를 자신의 스레드 안에서 실행시키는 것은 IntentService를 실행하는 것과 마찬가지라고 생각하는데요. 아닌가요?

두 가지 질문에 대해 답변해주시면 감사하겠습니다.

  • 2016년 07월 08일에 작성됨

조회수 156


1 답변


좋아요
0
싫어요
채택취소하기

이 주제와 관련해서 Tejas Lagvankar가 괜찮은 문서를 작성한 적이 있네요. 아래는 Service와 IntentService의 핵심적인 차이점입니다.

사용 시기

  • Service는 UI와 관련되지 않은 작업에 사용되며 수행시간이 길어선 안됩니다. 긴 작업을 수행할 필요가 있다면, 반드시 Service내에서 스레드를 사용해야됩니다.

  • IntentService는 보통 긴 작업에 사용되며 보통 메인 스레드와 상호작용하지 않습니다. 만약 메인 스레드와의 상호작용이 필요하다면, 메인 스레드 handler 혹은 broadcast intent를 사용하면 됩니다. Callback이 요구되는 상황에서도 사용됩니다(특정 작업을 시작시킬 intent).

시작 방법

  • Service는 startService() 메소드 호출에 의해 시작됩니다.

  • IntentService는 Intent를 사용하여 시작되며, 새로운 작업 스레드를 생성하고 onHandleIntent()메소드가 이 스레드 내에서 호출됩니다.

시작 위치

  • ServiceIntentService 모두 어떠한 스레드, 액티비티 혹은 다른 앱의 컴포넌트에서도 시작될 수 있습니다.

동작 위치

  • Servie는 백그라운드에서 동작하며 앱의 메인 스레드에서 동작합니다.

  • IntentService는 각각의 작업 스레드에서 동작합니다.

제한사항/단점

  • Servie는 앱의 메인 스레드를 막을 수 있습니다.

  • IntentService는 평행하게 동작하지 않습니다. 그래서 연쇄적으로 묶여있는 Intent들은 작업 스레드의 메시지 큐로 들어가서 순차적으로 실행될 것입니다.

멈추는 시기

  • Service를 implement 하셨다면, 작업이 모두 완료 되었을 때 Service를 멈추는 것은 사용자의 몫입니다. stopSelf()나 stopService()메소드를 통해서 말이죠.(단지 binding을 제공하고 싶으시다면 이 메소드를 implement할 필요가 없습니다.)

  • IntentService는 모든 요청이 처리된 후에 Service 중지시킵니다. 그래서 굳이 stopSelf() 메소드를 호출할 필요가 없죠.

  • 2016년 07월 09일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close