앱 만들기/안드로이드

안드로이드 MainThread 에서 오래 걸리는 일을 하면 안되는 이유.

나도 처음이야 2021. 8. 28.

안드로이드에서 우리가 프로젝트를 만들면,

기본적으로 MainThread 하나를 가지고 시작합니다.

바로, Oncreate() 로 구성된 이 부분이 MainThread 를 이루고 있는 뼈대입니다.

 

 

public class MainActivity extends AppCompatActivity {

@Override
 protected void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
  }

}

 

MainThread 에서는 주로 UI를 갱신하는 일을 전담하고 있습니다.

그렇기 때문에, MainThread 에서 오래 걸리는 작업들을 하게 되면 ANR 이 발생하기도 합니다.

즉, 앱이 먹통이 된다는 이야기죠.

그 예로, 하기 처럼 1초간의 딜레이를 주면서 UI를 업데이트하는 코드를 MainThread에서 동작하게 되면 

 

for(int i=0 ; i <= 100 ; i++) {
 try {
    Thread.sleep(1000);
  }catch (InterruptedException e) {

    e.printStackTrace();
  }

    progressBar.setProgress(i);
    textView.setText(i);
 }

 

앱은 ANR 이 발생하게 됩니다.

즉, MainThread는 항상 UI 갱신을 위해서 오래 걸리는 작업들은 피해야 되는 것입니다.

그럼, 이렇게 오래 걸리는 작업은 어디서 할까요? 바로 WorkThread 라 불리는 작업 스레드에서 처리해야 합니다.

앱을 예로 들어본다면, 우리가 카톡으로 채팅을 하면서 파일을 다운로드할 수 있죠.

바로 파일을 다운로드하는 동작은 백그라운드에서 동작하기에 MainThread 가 아닌 별도의 작업 스레드에서 작업이 되어야 하는 것입니다.

 

안드로이드 Mainthread에서는 오래 걸리는 작업은 피해야 되는 점.

개발 시 참고하면 좋겠습니다. 

다음 포스팅에서는 이어서 별도의 작업 스레드를 만들어서 오래 걸리는 작업을 해보겠습니다.

감사합니다. ^^

 

https://soo0100.tistory.com/1600?category=847049 

 

안드로이드 작업 쓰레드 만들어서 오래걸리는 일 해보기

https://soo0100.tistory.com/1599?category=847049 안드로이드 MainThread 에서 오래 걸리는 일을 하면 안되는 이유. 안드로이드에서 우리가 프로젝트를 만들면, 기본적으로 MainThread 하나를 가지고 시작합니다..

soo0100.tistory.com

 

반응형

댓글