2012-02-01 2 views
4

Service 클래스에 NetworkOnMainThreadException이 발생합니다.이 서비스는 내가 이해하는 한 백그라운드 프로세스이기 때문에 실제로 의미가 없습니다.NetworkOnMainThreadException in Service

Service 메서드에서 정적 도우미 메서드를 호출하여 데이터를 다운로드합니다. 나는 DefaultHttpClient도 사용하고있다.

여기 무슨 일 이니?

+0

당신이 쉽게 조사에 대한 코드를 보여줄 수 5 분마다에서 서버에 요청을하고있다? – OleGG

+0

** ['NetworkOnMainThreadException'] (http://www.androiddesignpatterns.com/2012/06/app-force-close-honeycomb-ics.html) **에 관한 내 게시물을 확인하십시오. 이것이 일어날 수있는 이유를 설명합니다. –

답변

5

onStartCommand()Service의 UI 스레드에서 실행됩니다. IntentService을 사용하거나 Service (Handler/Runnable, AsyncTask)의 다른 스레드 방법을 사용하십시오.

+0

서비스 중 AsyncTask를 호출 할 수 없기 때문에 기본 트레드에서 실행해야합니다. 맞습니까? – bgplaya

+0

@bgplaya 당신은 확실히'AsyncTask'를'Service'에서 사용할 수 있습니다. 위에서 말했듯이, 보통의 '서비스'는 메인 (UI) 스레드에서 실행됩니다. –

+0

내 코드를 검토해야하지만,'Service'에서'AsyncTask'를 사용하는 데 어려움이있는 것처럼 보입니다 : 아마도 나는 onStartCommand() – bgplaya

0

서비스 콜백은 모두 주 스레드, 즉 UI 스레드에서 실행됩니다. 백그라운드 작업을 원하면 Thread를 시작하거나 IntentService의 onHandleIntent (Intent i)를 사용하십시오.

0

응용 프로그램이 주 스레드에서 네트워킹 작업을 수행하려고 할 때 throw되는 예외입니다.

이것은 Honeycomb SDK 또는 을 타겟팅하는 애플리케이션에서만 발생합니다. 이전 SDK 버전을 대상으로하는 응용 프로그램은 기본 이벤트 루프 스레드에서 네트워킹을 허용하지만 크게는 입니다.

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

0

난 그냥이를 사용하여이 문제를 해결 :

public int onStartCommand(Intent intent, int flags, int startId) { 

    RefreshDBAsync task = new RefreshDBAsync(this); 
    task.execute(); 

    return START_STICKY; 
} 

RefreshDBAsync는