내 Android 앱의 서비스 클래스에서 REST WebService를 호출하면 NetworkOnMainThreadException
이 생성됩니다.Android : 서비스에서 네트워크 사용
필자는 Activity에서이 예외가 발생하는 이유를 알고 있습니다. 네트워크를 통해 동 기적으로 가져 오는 것은 매우 나쁜 습관이지만 서비스 클래스에서 같은 오류가 발생하는 것은 놀랍습니다. 제 질문은 :
-이 특별한 경우이 전화를 허용하려면 StrictMode.setThreadPolicy()
을 사용해야합니까? (활동에서이 오류가 발생했기 때문에이를 읽은 사용자는 StrictMode를 사용하여이 오류를 숨기지 말고 AsyncTask를 사용하십시오.)
- 또는 AsyncTask를 사용해야합니까? 그리고 그 경우에, 여기에 문제가 무엇입니까? 스레드의 서비스가 활동의 스레드와 분리되어 있지 않습니까?
답변 해 주셔서 감사합니다. 나는 그들이 백그라운드 작업에 사용되기 때문에 서비스가 기본적으로 다른 스레드에 있다고 가정했으나 그렇지 않습니다. 실제로 'MediaPlayer'에 대한 호출을 관리하기 위해이 서비스를 사용합니다. 'prepareAsync()'를 사용하면 주 스레드에서 문제가 발생하지 않으므로 문제를 우아하게 처리 할 수 있습니다. 'AsyncTask'를 사용하여 스트리밍 URL을 얻으려면 서비스를 수정해야합니다. – Teovald
좋은 답변입니다. 앱을 최적화하기 위해 네트워크를 효율적으로 사용하는 방법을 이해하는 데 도움이되는 자료도 있습니다. http://developer.att.com/developer/forward.jsp?passedItemId=7200042 –