1. 언제쓰이나?


· Service : UI없이 실행될 수 있지만 매우 길지 않아야 한다. 만약 오래걸리는 작업을 Service에서 실행하고자 한다면 Service 안에서 스레드를 사용해야 한다.


· IntentService : 오래걸리지만 메인스레드와 관련이 없는 작업을할 때 주로 이용한다. 만약 메인 스레드와 관련된 작업을 해야 한다면 메인스레드 Handler나 Boradcast intent를 이용해야 한다.




2. 어떻게 실행시키나?


· Service : startService() 메소드에 의해 실행된다.


· IntentService : Intent사용에 의해 실행된다. 새로운 스레드가 생성되며 onHandleIntent()가 불린다.





3. 불리는 위치


· ServiceIntentService 모두 아무 스레드에서 생성되고 , 액티비티 뿐만 아니라 다른곳에서도 실행가능하다.





4. 실행중인 위치


· Service : 백드라운드에서 동작하지만 메인스레드에 포함된다.


· IntentService : 새로운 스레드에서 동작한다.





5. 어떻게 멈추나


· Service : 순전히 사용자의 몫이다. stopSelf()나 stopService()에 의해 동작이 멈춘다. Service Binding의 경우 필요없음.


· IntentService : onHandleIntent() 내의 모든 동작이 수행되면 멈춘다. 멈추기 위한 다른 메소드 호출이 불필요한다.





6. 단점?


· Service : 메인스레드에 포함되므로 무거운 작업일때 메인스레드에 영향을주어 느려지거나 할 수 있다.


· IntentService : 병렬적으로 수행될 수 없으므로 연속적인 Intent 호출에 관해서 순차적으로 처리된다.





 

+ Recent posts