본문 바로가기
Android/Exceptions

java.lang.RuntimeException:::Unable to start activity ComponentInfo, NullPointerException:::Attempt to invoke interface method

by featherwing 2023. 4. 5.
반응형

1. 프로젝트 빌드는 문제없이 잘되는데 테스트를 위해 앱을 실행할 때 발생하였습니다.

보통  아래의 Exception(RuntimeException, NullPointerException)들이 랜덤으로 발생하는데, Logcat에서 띄워주는 코드 라인으로 가도 어떠한 문제도 없었습니다.

 java.lang.RuntimeException: Unable to start activity ComponentInfo
 java.lang.NullPointerException: Attempt to invoke interface method
 Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void androidx.appcompat.widget.DecorContentParent.setWindowCallback(android.view.Window$Callback)' on a null object reference

 

 

StackOverflow나 다른 매체의 사이트들에서는 해결방법으로

 

1. Build > Clean Project -> Rebuild Project

2. File > Invalidate cache

3. Android Studio 재시작

 

등을 제안했는데, 그 어떠한것도 해결방법이 아니었습니다.


2. 이 문제의 원인은 xml의 요소를 잘못 캐스팅해서 발생하는 경우가 대부분인것 같습니다.

제 경우는 xml 레이아웃에서는 LinearLayout으로 제작해 놓았던 커스텀 오브젝트를

커스텀 오브젝트는 RelativeLayout을 상속시켜 놓아서 발생하는것을 확인했습니다.

 

이문제가 무엇보다 골치아프고, 개발자의 시간을 빼앗아 먹는부분은 아래와 같습니다.

 

1. 커스텀 오브젝트가 잘못된 Layout을 상속했는데도 불구하고, 정상적으로 문제없이 실행되다가

다른 요소를 작업한 후 빌드하고 실행하면 위의 Exception을 뿜으며 앱 자체가 실행되지 않음.

2. Logcat의 메시지 또한 잘못된 부분을 링크해주지 못하고 정상적인 부분이 원인이라고 알림.

 

이기 때문에, 코드를 일일이 찾아야하고 원인을 찾기도 힘듭니다.

 

제 경우에는 처음에는 RelativeLayout을 상속받아서 만들어 두고 사용했던 커스텀 오브젝트의 레이아웃을 수정하는 과정에서 xml 파일에서 LinearLayout으로 수정했는데 정상적으로 앱을 빌드하고 테스트까지! 할 수 있어서 생각도 못하고 있었기 때문에, 원인을 찾는데 정말로 많은 시간이 소모되었습니다.

 


3. 해결방법은 커스텀 오브젝트나  특정 레이아웃을 상속하는 부분에서

xml파일과 일치하는 레이아웃을 상속시켜  주면 

문제가 해결됩니다. 

 

앱이 아예 실행이 안되는 부분이 아니고 케이스 바이 케이스로

때에 따라 간헐적으로 실행이 안되는 상황이 발생하기 때문에

해당 오류의 경우에는

사용된 요소들이 제대로된 레이아웃을 상속하는지 가장 처음으로 확인해야 합니다. 

 

반응형

댓글