마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Exception, ANR 등 발생시 감지할 수 있는 방법이 있을까요?

0 추천
스마트폰 실행중에

 
Application이 죽거나 (Fatal Exception, Force close)

Application 응답없음(ANR)이 발생하였을 때,
 

스마트폰은 이를 감지하고 해당되는 팝업을 발생하는데요.

 

 

제가 만든 App에서도 이 부분을 감지할 수 있는 방법이

혹시 있나요? 구글링을 해봐도 감을 잘 못잡겠네요.
국화향기 (430 포인트) 님이 2014년 2월 18일 질문

3개의 답변

+1 추천

다른어플의 크래쉬 에러, ANR 에러 감시 가능합니다.

https://developer.android.com/reference/android/app/ActivityManager.ProcessErrorStateInfo.html

위의 링크를 참조하세요.

참고로 자신의 크래쉬 에러는 익명사용자님이 남기신데로 Thread.UncaughtExceptionHandler로

감시 가능하고 자신의 ANR는 어플 재기동시 "/data/anr/traces.txt"의 내용을 읽어들여 판단하는 방법으로

가능은 합니다만 이 방법은 자신의 어플이 죽은이후 재기동 전에 다른 어플이 ANR로 죽은 경우엔 판단이

불가능합니다. (ANR로그는 가장 마지막에 죽은 어플의 로그만 남기 때문 )

레미_21 (2,920 포인트) 님이 2014년 2월 18일 답변
0 추천
1. 다른 앱의 ANR 이나 Exception 을 감지하고 싶다.

--> 불가능합니다.

2. 내 앱의 ANR을 감지하고 싶다.

--> 당연히 불가능하지요.

3. 내 앱의 Exception을 감지하고 싶다.

--> Thread.UncaughtExceptionHandler 로 검색해보세요.
익명사용자 님이 2014년 2월 18일 답변
0 추천
위의 두 경우 모두 App 수준에서 감지하는 행위가 아니기 때문에

에러 발생 시 감지해낼수는 없을 것 같네요.

 

하지만, 우회하여 생각해본다면 응답없음 경우는 미리 예방? 차원의 조치는 할 수 있지 않을까싶어요

예를 들면 ANR 이 발생하는 조건 중 해당 앱이 사용자의 반응에 10초 이상 답해줄수없는 상태이므로

작업스레드 등의 연산 수행 시 시간을 체크해서 10초 내에 리턴하지 못할경우 예외처리를 해준다던가 ㅎㅎ

 

결론은.. ANR 안 생기게 설계를 잘 하시는게 좋을 것 같아요 ^^
초보개발자ㅠ (33,870 포인트) 님이 2014년 2월 18일 답변
...