2012-04-08 5 views
4

ICS에서 UrlConnection을 사용할 때 android.os.NetworkOnMainThreadException 오류가 발생합니다. 자체 프로세스에서 실행되는 서비스에서이 요청을하고 있지만 Messenger를 통해 비동기 적으로 호출되도록 호출되었습니다.android.os.NetworkOnMainThreadException 서비스에서 별도의 프로세스로

StrictPolicy를 변경해도 아무런 효과가 없지만 여전히 오류가 발생합니다.

어떻게해야합니까?

편집 :이 서비스는 별도의 프로세스에서 실행됩니다 - 다른 pid와 모든 것을 가지고 있습니다.

답변

4

서비스는 여전히하여 documentation에 따라, 주 스레드에서 실행

주 그들의 호스팅 프로세스의 메인 쓰레드에서 실행되는 다른 응용 프로그램 객체 등의 서비스. 즉, 서비스가 CPU 집중적 인 작업 (예 : MP3 재생) 또는 차단 (예 : 네트워킹) 작업을 수행하는 경우 해당 작업을 수행 할 자체 스레드를 생성해야합니다. 이것에 대한 더 많은 정보는 프로세스와 쓰레드에서 찾을 수 있습니다. IntentService 클래스는 수행 할 작업을 예약하는 고유 한 스레드가있는 Service의 표준 구현으로 사용할 수 있습니다.

따라서 UrlConnection 사용과 같은 장기 실행 작업의 경우 IntentService과 같은 것을 사용하거나 새 스레드를 직접 생성해야합니다.

+2

이 서비스는 별도의 프로세스에서 실행됩니다. – Vadi

+0

다른 활동이나 서비스와 별개의 프로세스에서 실행되는 것은 중요하지 않습니다. 서비스에서 직접 실행되는 코드는 여전히 해당 프로세스의 주 스레드에서 실행됩니다. 대신 IntentService를 사용하면 onHandleIntent()에서 실행되는 코드에 대해 새 스레드가 자동으로 생성됩니다. – AdamK

+0

그래서 메인 태스크와 완전히 별개의 서비스 타이머에서 실행되는 태스크가 메인 프로세스 UI 스레드에 영향을 미칠 것이라고 말하고 있습니까? 네트워킹이 진행되는 동안 UI가 정지하지 않습니다. – Vadi

0

여기에 Thread의 네트워크 항목을 만드시겠습니까? 이 예외는 네트워크 작업으로 인해 UI가 멈추는 등의 문제를 방지하기 위해 발생합니다.

관련 문제