최근에 면접을 봤던 일이다.
"비동기 통신을 함으로써 ANR을 막을수 있다."
"그럼 ANR이 언제 발생하는지 알려주실수 있나요??"
"...네?"
다행이 회사는 붙었지만.. 그때의 상황은 아직도 충격..
ANR은 Application Not Responding 의 약자이다.
메인쓰레드의 UI가 멈춘채 진행을 하고 있지않다는 의미인데 출현 조건은 다음과 같다.
출현 조건
결국 그놈의 메인쓰레드가 어딘가에 묶여서 느리게 동작하는거다.
우리가 개발할때마다 심심할때 뜨는 ANR은 앱을 상향평준화 하려는 구글의 노력구글의계략이다.
개발자가 아닌 UX적인관점에서 보자.
인내심의 한계의 시간은 ‘3초’
구글 리서치 자료에 따르면 모바일 웹 사이트의 로딩 시간이 3초 이상일 때 32%, 5초 이상은 90%, 6초 이상은 106% 마지막으로 10초가 넘으면 123%의 이탈률이 발생한다고 합니다.
긴 로딩으로 인한 사용자 이탈막기 – UX 디자이너를 위한 팁 3가지
앱에서 3초만 응답이 없어도 90%가 빠져나간다니.. 후덜덜하지 않는가?
방금 그 멈춤 하나때문에 당신의 앱은 10%사용자만 남은것이다.
ANR을 예방하기 위해서는 어떻게 해야할까?
메인 쓰레드에서 무거운 작업을 하지 말고 대신 IntentService, AsyncTask, Handler, 다른 쓰레드와 같은 워커 쓰레드를 사용하도록 노력해보자.
그렇다면 ANR이 나오는 일을 없지 않을까...?