2012-08-27 2 views
1

IntentService을 사용하여 인터넷에서 무언가를 Android app으로 다운로드하고 있습니다. http://loopj.com/android-async-http/httpClient 또한 async입니다.IntentService 내부 처리기

내가 가진 문제는 내가 다운로드 async 전화를 발사 할 때 Service 스레드가 죽었 때문에 IntentService 스레드가 완료되고 http 클라이언트가 응답 콜백 할 수 없다는 것입니다.

나는 이처럼 핸들러를 사용했는데 작동하는 것처럼 보이지만 loppers에 대해서는 약간 분실되어 있습니다. 이 올바른지? 이 코드를 그대로 사용하면 안전합니까?

new Handler(getMainLooper()).post(new Runnable() { 
     @Override 
     public void run() { 
      //my downloading code here 
     } 
})); 

답변

3

의도 서비스는 백그라운드 스레드 자체를 제공하므로 onHandleIntent 메소드에서 직접 http 호출을 수행하고 브로드 캐스트를 통해 사용자 활동과 상호 작용하십시오.

그러나 loopj를 사용한 적이 없지만 필요한 모든 비동기를 제공합니다. 내가 왜 intentservice 안에 사용해야하는지 스스로에게 물어볼 것이다. 앱이 백그라운드로 실행되는 동안 앱을 실행해야하는 경우 더 나은 해결책은보다 고전적인 서비스에서 사용하는 것입니다.

구현하려는 임시 해결책은 인 텐트를 처리 한 후 만료되는 간단한 작업자 스레드 인 intentservices의 특성에 위배됩니다.

+0

IntentService를 사용하기 시작했는데 구현하기가 매우 쉽지만이 문제를 발견했습니다. 내 애플 리케이션에서 loopj http 비동기 클라이언트를 사방에 일관되게 사용하고 싶었습니다. 그래서 제가 제 질문에 언급 한 솔루션을 사용하게되었습니다. 그러나 당신이 옳다면, 고전적인 서비스가 더 나은 방법으로 일을 할 것입니다. –

+0

AsynHttp 대신 SyncHttp를 사용하면 잘 할 수 있습니다. 내 앱에서 이것을 사용했습니다. – Ajinkya

0

예, (아마도) 별도의 스레드에서 작동합니다 귀하의

다운로드 비동기 호출

때문에 안전 할 것으로 보인다.