- [Android] Thread.UncaughtExceptionHandler() 와 Firebase Crashlytics2023년 11월 03일 21시 36분 12초에 업로드 된 글입니다.작성자: 핀수728x90반응형
[Android] 전역적인 예외처리하기 | Thread.setDefaultUncaughtExceptionHandler
상황 앱 사용 중 앱이 픽 죽어버리거나 응답 없음 창(ANR)이 뜨는 것을 경험한 적 있을 것이다. 한두번이야 왜이래~~ 하면서 다시 앱을 실행해 사용하겠지만 이러한 상황이 지속된다면? 끔찍한 사
www.pinslog.com
전역적인 예외 (정확하게는 잡아내지 못한 예외)를 처리하기 위해 사용중이던 Thread.UncaughtExceptionHandler()
앱이 갑자기 픽 죽어버리는 것을 방지하기 위해
해당 핸들러를 통해 오류가 발생하였음을 알리고
앱을 재시작할 수 있도록 처리를 해두었다.
그리고 원인을 파악하여 해결하기 위해
Firebase Crashlytics를 이용해 크래쉬 로그를 수집하고 있었다.
그런데....
한창 사용하다 로그를 확인해보니 예외가 수집되지 않고 있었다.
다른 프로젝트와 비교해보았는데
다른 프로젝트는 오류가 날때마다 로그가 착실하게 수집되고 있었다.
뭐가 문제지 하고 찾아보니
커스텀 예외처리를 하고 있는 경우,
Crashlytics는 이를 비정상 종료가 아닌 것으로 간주하여 로그를 수집하지 않는다는 것이다! ㅇ0ㅇ
그래서 예외가 발생하였을 때 직접 로그를 수집할 수 있도록 코드를 추가해주었다.Firebase.crashlytics.recordException(e)
이렇게 수집된 오류는 콘솔창에서 비정상 종료 필터를 제거하면 확인할 수 있는데,
이것도 빠릿빠릿하게 수집되지 않는다는 것을 알게 되었다.
심각하지 않은 오류일 경우 모아두었다 앱을 재시작할 때 전송한다는 것이다.
그러나 앱이 재시작 되어도 로그는 남지 않았다.
도대체 전송시점은 언제며....예외가 발생하면 바로바로 대응할 수 없다는 것이 너무 열받았다(?)
위에서 잠깐 언급한 것처럼 예외가 발생할 경우 로그를 보내고
ErrorActivity를 띄워 앱을 재시작할 수 있도록 해두었는데
이때 임시방편으로 앱이 재시작 되기전 (프로세스가 종료되기 전) Thread.sleep() 으로 간격을 주었더니 로그가 기록되는 것을 확인할 수 있었다.
하지만 이건 어디까지나 임시방편이므로 권장하지 않는다.
다른 솔루션은 ContentProvider를 만들어 거기에 커스텀 예외처리 핸들러를 DefaultUncaughtExceptionHander를 지정해주고, AndroiManifest에서 Firebase Crashlytics 보다 높은 우선순위를 주면 된다고 한다. (initOrder = 101)
자세한 것은 아래의 링크를 참고하면 된다.Firebase Crashlytics With UncaughtExceptionHandler
I have integrated Firebase Crashlytics version 2.9.1 to digging out crashes to cover performance and stability of my app. Crashes are not being logged on firebase crashlytics console if applicati...
stackoverflow.com
CrashlyticsUncaughtExceptionHandler was giving control to com.android.internal.os.RuntimeInit.KillApplicationHandler, hence bypa
[READ] Step 1: Are you in the right place? Yup [REQUIRED] Step 2: Describe your environment Android Studio version: 4.0.1 (Stable) Firebase Component: com.google.firebase:firebase-core:17.5.0 com.g...
github.com
728x90반응형'pinslog > Log.daily()' 카테고리의 다른 글
[Android Studio] Live Template으로 JavaDoc 쉽게 작성하기 (0) 2023.11.08 [Android Studio] 내가 몰랐던 단축키 (0) 2023.11.07 [IDE] VSCode 새탭에서 열기 (0) 2023.10.30 [git] 변경사항이 적용되지 않은 상태에서 다른 브랜치로 이동하기 (0) 2023.10.29 [git] 머지 취소하기 (0) 2023.10.28 다음글이 없습니다.이전글이 없습니다.댓글