1. Android ANR (애플리케이션 응답 없음)
- Android 앱의 UI 스레드가 너무 오랫동안 차단되면 'ANR(애플리케이션 응답 없음)' 오류가 발생
- 버튼을 누를 때 무한루프를 실행하는 코드를 작성하면 무한루프때문에 유저의 버튼 클릭 등의 응답을 할 수가 없다.
2. ANR이 발생하는 경우와 해결책
- 안드로이드는 Main Thread ( UI Thread ) 가 UI 를 처리
- UI처리란? 유저가 탭하는 등의 일을 처리
만약, UI 쓰레드에서 아래와 같이 오래 걸리는 일을 할 경우에는 다른 쓰레드에서 처리를 해 줘야 한다.
- 네트워크 통신, DB처리, 파일처리 등의 I/O 와 관련된 일을 처리하는 경우
- 시간이 오래 걸리는 계산을 하는 경우
따라서, 개발자는 쓰레드와 쓰레드 풀을 만들어서 처리해야 하는데 이러한 것들을 잘 활용할 수 있도록 라이브러리를 사용한다. volley 나 retrofit2, glide 등의 라이브러리를 사용하면 쓰레드나 쓰레드풀 걱정없이 사용할 수 있다.
3. 안드로이드 UI 핸들러 (Android UI Handler) 가 필요한 이유
- 여러 쓰레드들이, 하나의 텍스트뷰에 모두 억세스하는 경우, Critical Section 이 되므로 문제 발생
- 따라서 순서를 정해서 처리할 수 있도록 메세지 큐 (Message Queue)에 해야할 일을 넣고, UI 핸들러(UI Handler)가 UI관련된 일을 전담하여 처리하면 순서대로 문제없이 작업 할 수 있다.
- UI 쓰레드안에, 메세지큐와 UI 핸들러가 있다.
- 결론을 쉽게 예로 들자면 학생 20명이 선생님 1명에게 질문을 하려한다. 모두 손을 들고 질문하면 누구부터 질문 처리해야 할까? 학생들이 질문할때 선생님의 이메일로 질문을 보내 놓으면, 선생님은 이메일 온 순서대로 질문을 처리해 주면 된다.
'IT' 카테고리의 다른 글
JAVA (0) | 2020.10.20 |
---|---|
Android Studio - Git 연동 (0) | 2020.10.16 |
Node.js Express - S3설정 (0) | 2020.10.16 |
AWS Serverless - Express 설정 방법 (0) | 2020.10.16 |
AWS EC2 파일 업로드 용량 변경(413 Request Entity Too Large) (0) | 2020.10.16 |