안드로이드에서 우리가 프로젝트를 만들면,
기본적으로 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
'앱 만들기 > 안드로이드 study' 카테고리의 다른 글
안드로이드 AsyncTask 로 비동기 처리 만들어 보기 (2) | 2021.08.30 |
---|---|
안드로이드 작업 쓰레드 만들어서 오래걸리는 일 해보기 (2) | 2021.08.29 |
안드로이드 주석처리 하기. 단축키 <CTRL>+</> (4) | 2021.08.12 |
안드로이드 에러 Caused by: android.view.InflateException 수정하기 (2) | 2021.08.11 |
안드로이드 layout_weight 사용법 그리고 주의할 점 (2) | 2021.08.06 |
댓글