2012-08-05 3 views
3

재고 캘린더 앱의 소스 코드를 보면 Google은 IntentService를 사용하여 데이터베이스에 대한 콘텐츠 제공자 작업을 수행합니다. AsyncQueryHandler가 아닌 IntentService를 사용하면 장점이 있습니까?AsyncQueryHandler 대 IntentService?

Handler가 UI에 묶여 있기 때문에 활동이 일시 중지되거나 중지되면 Handler도 일시 중지 될 것이라고 생각했습니다. 그러나 이것은 사실이 아닌 것처럼 보입니다 : 나는 단순한 컨텐트 프로 바이더와 AsyncQueryHandler를 만들어서 long for 루프를 돌며 실행합니다. 다른 앱을 실행하거나 활동을 종료하면 for 루프가 계속 실행됩니다.

서비스 (서비스)가 죽을 가능성이 적은 비동기 CRUD 작업에 IntentService를 사용하면 이점이 있습니까?

업데이트 : 혼란 스러울 부분은 처리기가 활동의 수명주기와 어떤 관련이 있는지입니다. 내 실험에서, 그것은 독립적 인 것으로 보인다.

또한 캘린더 애플리케이션 소스 코드에 익숙하지 않은 사용자의 경우 CRUD를 수행하는 방식으로 핸들러에 대한 참조와 함께 작업을 대기열에 추가합니다. 그런 다음 큐를 팝하고 CRUD를 수행하는 인 텐트 서비스를 시작합니다. 완료되면 Message.sendToTarget()을 통해 핸들러를 호출합니다.

그렇다면 추가 복잡성으로 인해 우리는 무엇을 구매합니까?

답변

0

나는 혼란에 빠지다. 내가 발견 한 것은 IntentService가 그 활동으로 죽을 것이라는 것이다. 이것은 또한 오리엔테이션 변경에서 살해된다는 의미입니다. AsyncQueryHandler가 계속 실행되는 동안 (당신이 발견 한대로). 필자는 데이터베이스를 업데이트 할 때까지 기다리지 않고 UI를 먼저 업데이트하고 있습니다. 그래서 AsyncQueryHandler를 선택할 것입니다.

인텐시브 서비스 (결코 사용하지 않음)에 대해서는 잘 모르지만 메시지를 보낼 때 데이터베이스에서 UI 스레드에 표시 할 항목이 필요할 때 유용 할 수 있습니다. 데이터베이스가 언제인지 알 수 있습니다. 업데이트되었습니다.

관련 문제