안드로이드 개발

android.os.NetworkOnMainThreadException 가장 쉽게 해결하는 방법

피커 2021. 7. 21. 15:06
728x90
반응형

android.os.NetworkOnMainThreadException 에러 해결방법만 원하시는 분은 3번으로 넘어가세요 ^^

 

1. 개념.

-. 안드로이드를 개발하다보면 android.os.NetworkOnMainThreadException 라는 에러메시지를 보곤한다.

위 에러는 안드로이드의 기본 activity에서 network 관련 API를 직접 사용했을때 발생한다.

이 개념은 대부분의 OS에서 적용되는 Limitation이다.

예를 들면 .net이라고 불리는 윈도우 개발에서도 form(안드로이드에서는 activity의 개념)에서 

network API를 쓰게되면 멈추는 현상(UserInterface stuck)이 발생한다.

 

2. 가능 솔루션

-. 사용자가 사용하는 User interface(버튼을 누르는 등의 동작)와 별개의 프로세스(thread)에서 network를 사용해야한다.

즉, Thread를 따로 만들어 Network(Http등의 동작) API를 쓰도록하면 해결된다.

 

3. 해결 방법

-. 가장 간단한 해결법을 공유하면 아래와 같다.

MainActivity에서 Network동작을 쓰고싶은곳에서 아래처럼 입력하면된다.

 

Before, 아래 코드를 실행하게 되면 NetworkOnMainThreadException 에러가 발생한다.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        getXmlData(); // network 동작, 인터넷에서 xml을 받아오는 코드
    }

 

After, 아래처럼 new thread를 처리하면 에러없이 해결된다. 빨간색 코드가 추가된 코드이다.
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        new Thread(() -> {
                getXmlData(); // network 동작, 인터넷에서 xml을 받아오는 코드
        }).start();
    }

이보다 간단한 해결방법은 보지 못하였다. ^^

즐거운 코딩이 되길 바랍니다.

 

좋은 하루 되세요.

 

 

반응형