2

나는 ServiceIntentService에 관한 많은 자료를 읽었습니다. 그러나 결정을 내릴 때, 시간 간격으로 데이터베이스에서 데이터를 폴링하고 데이터가 표시되기 때문에 원하는 데이터를 얻을 때 백그라운드 서비스를 작성하기 위해 사용할 유형을 선택하기에 충분하지 않습니다. 요청의 상태, 예. 주문 약품 확인 상태 (보류 중, 완료 중, 진행 중). 상태가 "완료"로 설정되면이를 감지하고 주문이 완료되었음을 사용자에게 알리는 알림을 보내야합니다. 그 후 서비스는 자동으로 중단됩니다. 친절하게 조언하십시오. 고맙습니다.서비스 및 IntentService, 어느 서버에서 데이터베이스 값을 폴링하는 서비스를 실행하는 것이 더 낫습니까?

+0

작업이 없어지면 자동으로 중지되므로 'IntentService'쪽으로 더 기울여야합니다. 하지만 실제로 사용하지는 않았으므로 신뢰할 수있는 출처가 될 수 없습니다. –

답변

0

의도 서비스 -하지 메인 스레드에서 작업자 스레드에서

  • 작품.

  • 해당 작업을 실행하기위한 목적은 별도의 스레드이며 종료됩니다.

  • 작업을 수행하고 중지합니다.

  • htp와 같은 것들에 이상적입니다. 서버와 연결 상태를 유지할 필요가 없습니다.

서비스 - 메인 스레드에서

  • 실행됩니다.

  • 이상적인 서버 (즉, 영구적 인 TCP 연결)와 연결 상태를 유지하는 요구 사항이, 당신이 갈 수있는 방법은 AsyncTask를 또는 이상을 사용하여 네트워킹 물건을 수행하는 서비스 (하지 의도를)하는 것입니다 서비스에서 호스팅되는 클래식 스레드

+0

잘못된 것입니다. 'IntentService'는'Service' 클래스이고,'Service' 클래스를 확장합니다. 'Service'는 어떤 스레드에서도 실행되지 않습니다. 이것은 객체입니다. 클래스의 ** 메소드는 임의의 스레드 **에서 실행될 수 있습니다. 'Service'와'IntentService'의 라이프 사이클 메소드 ('onCreate()','onStartCommand()'등)는 메인 (UI) 스레드의 안드로이드 프레임 워크에서 호출되기 때문에 메인 스레드에서 실행됩니다 . 'Thread'에서 실행되는 자신의 메소드를 구현할 수 있으며 원하는대로 원하는대로 스레드를 시작할 수도 있습니다. 'IntentService'는 관리되는 스레드 ... –

+0

...의 풀을 제공하는'Service'의 확장이며, 이들 스레드에 대한 대기열 및 대기열 해제 작업을위한 메커니즘과 작업 큐가 완료 될 때 자체 중지를 관리합니다. 'Service'를 사용하여이 처리를 직접 구현할 수도 있습니다. 그것은 로켓 과학이 아닙니다. 백그라운드 스레드의 관리를보다 잘 제어하고 싶다면 자신이 무엇을하고 있는지 모르기 때문에'IntentService'를 사용해서는 안됩니다. –

+0

'IntentService'의'onHandleIntent()'메소드는 메인 (UI) 스레드가 아니라 작업자 스레드에서 호출됩니다.이것은 일반적으로 "장기 실행 작업"을 수행 할 위치입니다. –

0

아무런 차이가 없습니다. 쉽게 찾을 수있는 것을 사용하십시오. 이 질문은 걱정할 필요가 없습니다. 기본 (UI) 스레드에서 실행해야하는 코드와 백그라운드 (작업자) 스레드에서 실행해야하는 코드를 이해했는지 확인하십시오. IntentService에서 "장기 실행 작업"은 onHandleIntent()에서 실행해야합니다. ServiceonStartCommand()에서 사용하는 경우 자신의 백그라운드 스레드를 시작하고 그에 대한 "장기 실행 작업"을 실행합니다.