안드로이드 앱 개발 공부/안드로이드 기본(노션 이동)

[Android] Main Thread(UI Thread ) 와 Worker Thread

플래시🦥 2023. 3. 6.
반응형
  • UI는 멀티스레드에서만 가능하도록 설계되어 있다.
  • 오래 걸리는 작업은 worker Thread에서!
public void onClick(View v) {
    new Thread(new Runnable() {
        public void run() {
            Bitmap b = loadImageFromNetwork("<http://example.com/image.png>");
            mImageView.setImageBitmap(b);  // 여기서 오류 발생!!
        }
    }).start();
}

→해결방법

public void onClick(View v) {
    new Thread(new Runnable() {
        public void run() {
            final Bitmap bitmap =
                    loadImageFromNetwork("<http://example.com/image.png>");
            mImageView.post(new Runnable() {
                public void run() {
                    mImageView.setImageBitmap(bitmap);
                }
            });
        }
    }).start();
}

이 방법이 싫다면 AsyncTask를 사용하면 되었지만 AsyncTask는 재사용이 불가능하고, 직접 종료하지 않으면 종료되지 않아 메모리 누수가 생기는 치명적인 단점 때문에 deprecated 되었다.

  • 이유
    • 메인 스레드에서 데이터를 받아오는 작업을 계속 기다리게 되면 사용자는 움직이지 않는 앱을 마주하게 된다.
    • 5초 이상 앱이 반응하지 않으면 ANR이 발생한다.
728x90
반응형

댓글