Android2013. 5. 31. 18:30

NetworkOnMaintThreadeEception 이 발생하는 원인이 여러가지 있겠지만 그 중 한가지로 안드로이드 3.0(honeycomb) 부터 기본적으로 수행되는  StrictMode때문에 발생할 수 있습니다. App이 실행되는 os가 honeycomb이하의 경우는 정상정으로 실행되나 honeycomb이상의 os부터는 NetworkOnMaintThreadeEception 이 발생 하면서 App이 정상 동작을 하지 않는 이유입니다.

Android에서  Strict Mode 도입하게 된 이유나 사용법에 대해서는 아래 블로그 참조 

http://dev.kthcorp.com/2012/01/31/android-strict-mode-howto/


NetworkOnMaintThreadeEception을 처리하기 가장 좋은 방법은 mainThread에서 하는 네트워크 관련 작업등 mainThread에서 오래 실행되는 작업을 새로운 Thread를 통하여 실행되게 수정하는 것이 가장 좋은 방법입니다.  

아래 블로그 참조

http://ironheel.tistory.com/48

http://ralf79.tistory.com/85


이외에 Thread 분리 작업이 너무 많아져서 임시로 NetworkOnMaintThreadeEception을 처리하고 싶은 경우는 아래의 코드를 Activity의 onCreate()에 넣어주시면 NetworkOnMaintThreadeEception가 발생되지 않습니다. 

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

중요한 점은 임시로 처리 하는 방법이기 때문에 오래 실행되는 작업은 mainThread와 따로 Thread를 분리하는 방법으로 Exception을 처리하는걸 권장합니다.

Posted by 위푸