조각들

 

 

안드로이드 처음 시작했을 때 이 그림을 보고는 "Activity처럼 Fragment도 생명주기가 있다는 내용이구나"하고 넘겼었다. 제대로 안 본 것이다.

 

다시 봐보니 Fragment와 별개로 View의 Lifecycle이 존재한다는 것을 알았다. 

 

보통 fragment를 쓰면 onDestroy 부분에 binding 객체를 null로 하여 참조를 제거해주는 코드를 베이스로 많이 쓴다. 이걸 왜 해주는지안다면 viewLifecycle도 모를 수가 없었을 텐데.

 

결론부터 얘기하자면 뷰의 수명이 fragment보다 짧기 때문이다. 따라서 뷰는 죽어있는데 fragment는 살아있는 경우가 있을 수 있다. 이때 죽어있는 뷰에 대한 참조를 계속 가지고 있으면 GC가 메모리 회수를 못해서 메모리 leak이 일어난다. 또한 옵저버 등을 통해 갱신시키려고 들면 NullPointerException 또는 IllegalStateException이 발생한다.

 

view.findViewById<Button>(R.id.someButton).setText("New Text")  // 이때 view가 null일 수 있음

 

liveData.observe(viewLifecycleOwner, Observer {
    view.textView.text = it  // 뷰가 이미 파괴된 상태일 수 있음
})

 

따라서 해당 뷰에 영향을 줄 수 있는 로직들은 activity가 아닌 viewLifecycle을 따라야 한다.

 

"view가 별개의 수명주기를 가진다면 activity에서는 어떻게 되는 걸까?, 또 뷰는 언제 죽을 수 있는 거지?"라는 의문이 들었다. 이 부분은 추후 자세히 다뤄보도록 하겠다.

 


참고

공식 문서

https://developer.android.com/guide/fragments/lifecycle?hl=ko&_gl=1*qaecys*_up*MQ..*_ga*MTk5NjI5MzM2Mi4xNzI1NzcwMjk0*_ga_6HH9YJMN9M*MTcyNTc3MDI5My4xLjAuMTcyNTc3MDI5My4wLjAuMA..

 

프래그먼트 수명 주기  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 프래그먼트 수명 주기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 각 Fragment 인스턴스에는 고유한

developer.android.com

'Android > 공부' 카테고리의 다른 글

코루틴  (0) 2024.05.30
retrofit의 비동기 처리  (0) 2024.04.29
Flow  (2) 2024.03.14
Repository의 효용에 대한 고찰  (0) 2023.03.16
[공부] Github Action CI  (0) 2023.03.04