안드로이드/에러

[Android] 프래그먼트 빈생성자가 없어서 생긴 문제 ContextAwareHelper

코딩하는후운 2023. 4. 21. 14:29
반응형

프래그먼트 빈생성자가 없어서 생긴 문제 

-  다이얼로그 띄워놓고 화면 리사이즈하니 Exception 발생

접근방법 :

  • 프래그먼트 빈생성자가 없어서 생긴 문제 같다로 접근
  • 제이씨가 맵핑파일을 전달해주어 난독화를 풀어서 확인을 해보기로 접근.

맵핑된 파일에서

oi.b → 로 검색을 하면, 어떠한 클래스로 맵핑 되는지 알 수 있다고 함.

디버깅하고있는 APK 버전에서 역추적을 해야한다고 함.(계속 바뀌기 때문)

CustomProgressDialog를 발견했고, DialogFragment()를 상속받고 있음.

테스트 방법

  • 아무곳에 CustomProgressDialog에 파라미터가 있는 생성자로 테스트
  • 다른앱들을 25개넘게 사용
  • 나중에 확인했지만 다이얼로그 띄워놓고 화면 리사이즈하니 동일한 이슈 발생

 

원인

  • 프래그먼트가 먼저 실행된 상태에서 백그라운드로 내려가고 다른앱들 실행
    • 메모리를 다른곳에서 사용 → 기존에 가지고 있던 메모리를 삭제.
    • 프래그먼트는 재생성이 될 때 빈 생성자로 생성 된다고함.
      • 인자가 들어간 프래그먼트이면 빈생성자가 없기 때문에 Exception이 발생.

 

해결 방법

  • 빈 생성자로 생성하게 하고 파라미터를 인자로 설정하게 하자

확인해보니 다이얼로그 띄워놓고 화면 리사이즈하니 동일한 이슈 발생
UI가 변경되는 상황이 오면
내부에서는 빈 생성자를 생성해야하는데 그게 없어서 죽는 것 같다.

class CustomProgressDialg private constuctor(val uiContext: Context) : DialogFragment()

에서 아래 빈 생성자 추가

constructor(): this(Application.context) {}

constructor(): this(Application.context) {} 로 빈 생성자 생성

 

참조 : 
회사사람 Bottle의 내용 전달

반응형