본문 바로가기
IT/Android

Android DeadObjectException

by 큰공 2020. 11. 5.
728x90
반응형

 

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

 

DeadObjectException  |  Android 개발자  |  Android Developers

 

developer.android.com

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 로그 이므로 그 근본원인인 앞선 단계에서의 죽은 원인을 분석하는 것이 옳다.

 또한, DeadObjectExceptionDeadSystemException 이 병행해서 출력된다면, 이는 안드로이드 코어 시스템이 먼저 죽은 상태에서 모든 앱들이 죽고, 그 앱의 객체를 참조할 수 없어서 발생하는 Exception 이다.

 

맺으며

DeadObjectException 이 발생한다면, 해당 Exception 의 Log를 Trace 하기 보다는, 앞선 단계에서의 프로세스가 먼저 Kill 이 되었을 것이고, 그 원인을 분석하자.

 

 

 

 

 

 

 

728x90
반응형

댓글