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 이상일 때, 스레드 정책에서 모든 제약조건을 허용하게 만든다. 따라서, 이를 통해서 메인 스레드에서 네트워킹 관련 기능을 처리할 수 있게 만드는 것이다.
반응형
'Android' 카테고리의 다른 글
adb를 통해 앱 로그 얻기 (2) | 2023.12.30 |
---|---|
java.lang.ClassNotFoundException: Didn't find class "java.time.Duration" on path: DexPathList 해결법 (0) | 2022.09.20 |
ADB 커멘드 정리 (0) | 2022.09.15 |
ADB로 apk 설치하기 (0) | 2022.09.15 |
WebView net::ERR_CLEARTEXT_NOT_PERMITTED (0) | 2020.06.26 |