(참고)

IntentService는 1.자동으로 종료가 되고,

                    2.스레드를 사용하지 않아도 된다.

                    왜냐하면 onHandleIntent()는 "백그라운드 스레드"로 동작을 하게 됩니다

 

service는 1.종료가 되지 않는다!!!!

 

 

 

1. 언제쓰이나?

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

 

 

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

 

 

 

2. 어떻게 실행시키나?

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

 

 

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

 

 

 

 

3. 불리는 위치

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

 

 

 

 

4. 실행중인 위치

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

 

 

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

 

 

 

 

5. 어떻게 멈추나

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

 

 

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

 

 

 

 

6. 단점?

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

 

 

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