IT

안드로이드 ANR (Application Not Responding)

jeonganWkd 2020. 10. 16. 15:45

1. Android ANR (애플리케이션 응답 없음)

  • Android 앱의 UI 스레드가 너무 오랫동안 차단되면 'ANR(애플리케이션 응답 없음)' 오류가 발생
  • 버튼을 누를 때 무한루프를 실행하는 코드를 작성하면 무한루프때문에 유저의 버튼 클릭 등의 응답을 할 수가 없다.

ANR

2. ANR이 발생하는 경우와 해결책

  • 안드로이드는 Main Thread ( UI Thread ) 가 UI 를 처리
  • UI처리란? 유저가 탭하는 등의 일을 처리

 UI 메인쓰레드 UI쓰레드

만약, UI 쓰레드에서 아래와 같이 오래 걸리는 일을 할 경우에는 다른 쓰레드에서 처리를 해 줘야 한다. 

  • 네트워크 통신, DB처리, 파일처리 등의 I/O 와 관련된 일을 처리하는 경우
  • 시간이 오래 걸리는 계산을 하는 경우

UI 메세지 큐

따라서, 개발자는 쓰레드와 쓰레드 풀을 만들어서 처리해야 하는데 이러한 것들을 잘 활용할 수 있도록 라이브러리를 사용한다. volley 나 retrofit2, glide 등의 라이브러리를 사용하면 쓰레드나 쓰레드풀 걱정없이 사용할 수 있다.

 

3. 안드로이드 UI 핸들러 (Android UI Handler) 가 필요한 이유

  • 여러 쓰레드들이, 하나의 텍스트뷰에 모두 억세스하는 경우, Critical Section 이 되므로 문제 발생

UI 핸들러

  • 따라서 순서를 정해서 처리할 수 있도록 메세지 큐 (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