0

온라인 데이터베이스의 데이터를 로컬 데이터베이스에 동기화하려고한다고 가정합니다. 서비스는 찾을 구성 요소입니다.IntentService에서 새 스레드를 실행

정상적인 서비스를 시작하면 주 스레드에서 시작된다는 것을 알게되고 시간이 많이 걸리는 작업을 실행하면 UI가 차단됩니다. 즉, 작업을 완료하기 위해 AsyncTask와 같은 것을 사용해야 할 것입니다.

반면에 의도 서비스를 사용하는 경우 병렬 스레드에서 실행되며 긴 작업을 실행해도 UI가 차단되지 않는다는 것을 이해합니다. 내가 호출하는 다른 인 텐트 서비스가 대기열에 있습니다.

하지만 IntentService에서 네트워크 호출을 위해 병렬 스레드를 생성하면 어떻게됩니까?

네트워크 서비스가 완료 될 때까지 인 텐트 서비스가 대기하거나 병렬 스레드에서 호출하고 다음 인 텐트 서비스를 대기열에서 실행합니까?

+1

왜 네트워크 호출을 위해 병렬 스레드에서 병렬 스레드를 만들어야합니까 ??? 'IntentService'에서 dirrectly 사용하십시오. –

+0

왜'if' 문이 종료되는 동안 병렬 스레드가 사용됩니까? – Xenolion

+0

나는 단지 궁금했다. 나는 그 하하를 만들지 않을 것이다. –

답변

0

Service의 주 (UI) 스레드에서 수명주기 호출 (예 : onCreate(), onStartCommand()) 만 호출됩니다. 백그라운드 활동이 있으면 onStartCommand()에서 자신의 백그라운드 스레드를 시작할 수 있습니다. 이 경우 IntentService을 사용할 필요가 없습니다.

IntentService은 특정 동작이있는 Service의 특정 구현입니다. startService()을 호출하고 수행 할 작업을 설명하는 Intent을 전달하여 "작업"을 보냅니다. IntentService은 대기중인 "작업"이 모두 완료 될 때까지 실행 된 다음 스스로 종료됩니다. IntentService은 "작업"의 대기열, 백그라운드 스레드에서의 "작업"실행 및 IntentService의 자동 종료를 처리하는 일반 Service 상단의 thi8n 계층에 불과합니다. 이것이 원하는 동작이 아니라면 모든 상황에 적절하지 않으므로 IntentService을 사용해서는 안됩니다. Service에서 백그라운드 스레드를 시작하는 것은 그리 어렵지 않습니다.