ERROR 메시지
관리하고 있는 APP 에서 DeadObjectException 이 발생하면서 Crash 가 발생하였다. DeadObjectException 이 뭔지 어떻게 분석하는지 한번 알아 보자.
AndroidRuntime: Error reporting crash
AndroidRuntime: android.os.DeadObjectException
AndroidRuntime: at android.os.BinderProxy.transact(Native Method)
AndroidRuntime: at android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:3852)
AndroidRuntime: at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:84)
AndroidRuntime: at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
AndroidRuntime: at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
System.err: android.os.DeadObjectException
System.err: at android.os.BinderProxy.transact(Native Method)
System.err: at com.mnsoft.navi.NativeCall.retCommonStatus(NativeCall.java:3956)
System.err: at com.mnsoft.navi.NativeCall.nativeRender(Native Method)
System.err: at com.mnsoft.navi.NaviGLThread.render(NaviGLThread.java:478)
System.err: at com.mnsoft.navi.NaviGLThread.guardedRun(NaviGLThread.java:340)
System.err: at com.mnsoft.navi.NaviGLThread.run(NaviGLThread.java:197)
DeadObjectException
우선 안드로이드 OS에서 발생하므로 안드로이드 Developer 사이트를 먼저 살펴보자.
https://developer.android.com/reference/android/os/DeadObjectException
The object you are calling has died, because its hosting process no longer exists.
해석하면, 호스팅 프로세스가 더 이상 존재하지 않기 때문에 호출중인 개체가 종료되었습니다. 이다.
즉, 메인 Process 가 죽었는데, 그 프로세스 내부의 객체를 누가 호출하거나 사용할려고 했기 때문이다. 머리가 죽었는데 손을 어찌 사용할 수 있겠는가?
DeadSystemException
추가적으로 DeadObjectException 의 서브 클래스인 DeadSystemException 을 보자. DeadObjectException 는 API 1 부터 적용된 초기 API 이지만, 해당 API는 24 부터 추가된 그나마 최신 API 라고 볼수 있다.
설명을 인용해보면,
The core Android system has died and is going through a runtime restart. All running apps will be promptly killed.
안드로이드 코어 시스템이 작동 중지되어 실시간 재시동 중인 상태이다. 실행 중인 모든 앱이 즉시 삭제됩니다.
분석
DeadObjectException / DeadSystemException 은 Application 단에서 검토될 만한 사항이 아니라고 판단된다.
DeadObjectException는 어떠한 이유에서 Application 의 프로세스가 먼저 죽고, 죽은 뒤에 출력되는 Exception 로그 이므로 그 근본원인인 앞선 단계에서의 죽은 원인을 분석하는 것이 옳다.
또한, DeadObjectException 와 DeadSystemException 이 병행해서 출력된다면, 이는 안드로이드 코어 시스템이 먼저 죽은 상태에서 모든 앱들이 죽고, 그 앱의 객체를 참조할 수 없어서 발생하는 Exception 이다.
맺으며
DeadObjectException 이 발생한다면, 해당 Exception 의 Log를 Trace 하기 보다는, 앞선 단계에서의 프로세스가 먼저 Kill 이 되었을 것이고, 그 원인을 분석하자.
'IT > Android' 카테고리의 다른 글
System.err: android.content.pm.PackageManager$NameNotFoundException: com.example.app (2) | 2024.01.31 |
---|---|
첫번째 타겟 보다 앞에서 명령어가 시작되었습니다 멈춤 (2) | 2020.11.10 |
안드로이드 ANR 분석 (2) | 2020.06.12 |
Android FastBoot Error (2) | 2020.06.08 |
ADT 마지막 버전 링크 (0) | 2020.06.04 |
댓글