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에서 백그라운드 스레드를 시작하는 것은 그리 어렵지 않습니다.

관련 문제