반응형
- 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
반응형
'안드로이드 앱 개발 공부 > 안드로이드 기본(노션 이동)' 카테고리의 다른 글
[Android] Dialog, Toast, Snackbar (0) | 2023.03.06 |
---|---|
[Android] ANR (0) | 2023.03.06 |
[Android] Thread 와 Process의 차이점 (0) | 2023.03.06 |
Thread 와 Handler (0) | 2023.03.04 |
[Android] PendingIntent (0) | 2023.03.04 |
댓글