Android

android.os.NetworkOnMainThreadException 해결 방법

검정비니 2020. 7. 11. 15:59
728x90
반응형

Android HoneyComb 부터는 메인 스레드에서 네트워크 통신 처리를 하게 되면 "android.os.NetworkOnMainThreadException"이 발생하게 된다.

 

이를 해결하기 위해서 가장 먼저 고려해볼 해결 방법은 바로 AsyncTask를 사용하는 것이다. 이 AsyncTask는 새로운 스레드를 만들지 않아도 안드로이드 운영체제가 알아서 미리 준비된 스레드를 사용해서 비동기적으로 일을 처리한다.

 

AsyncTask에 대한 자세한 설명은 아래의 링크를 참고하길 바란다.

<https://developer.android.com/reference/android/os/AsyncTask>

 

대부분의 경우에는 이 AsyncTask를 사용해서 문제를 해결할 수 있을 것이다. 그러나, 일부 경우에는 시나리오 혹은 앱의 구조 상 이 네트워크 처리를 비동기적으로 수행하지 못하는 경우가 생길 수 있다.

 

이러한 경우에는 아래의 코드를 NetworkOnMainThreadException 스레드가 생기는 Activity 클래스의 onCreate 메소드 안에서 "setContentView(R.layout.activity)" 바로 밑에 추가하면 된다.

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

 

위의 코드는 Android SDK 버젼이 9 이상일 때, 스레드 정책에서 모든 제약조건을 허용하게 만든다. 따라서, 이를 통해서 메인 스레드에서 네트워킹 관련 기능을 처리할 수 있게 만드는 것이다.

 

반응형