이동식 저장소

lifecycleOwner vs. viewLifecycleOwner 본문

Primary/Android

lifecycleOwner vs. viewLifecycleOwner

해스끼 2023. 3. 17. 22:36

Fragment도 Activity와 유사한 lifecycle을 갖는다. Lifecycle.State enum에서 모든 상태 값을 확인할 수 있다.

  • INITIALIZED
  • CREATED
  • STARTED
  • RESUMED
  • DESTROYED

그런데 fragment의 view는 fragment와 별도의 lifecycle을 갖는다. 뷰가 보이지 않지만 fragment 자체는 살아있을 수 있기 때문이다. View binding을 onCreate가 아닌 onCreateView에서 초기화하는 이유이기도 하다.

 

최근 본 코드 중에 fragment에서 LiveData를 observe하는 코드가 있었는데, 생명주기를 lifecycleOwner로 설정하니 메모리 누수가 탐지되었다. 이유인즉슨 fragment의 view가 destroy되었으므로 LiveData도 observe를 멈춰야 하는데, 생명주기가 lifecycleOwner에 맞춰져 있어서 계속 observe되고 있었기 때문이다.

 

lifecycleOwner 대신 viewLifecycleOwner를 사용하면 메모리 누수가 발생하지 않는다.

 

Fragment UI와 관련된 코드에서는 가급적 viewLifecycleOwner를 사용하자.

참고한 글

 

Fragment lifecycle  |  Android Developers

Fragment lifecycle Stay organized with collections Save and categorize content based on your preferences. Each Fragment instance has its own lifecycle. When a user navigates and interacts with your app, your fragments transition through various states in t

developer.android.com

 

'Primary > Android' 카테고리의 다른 글

Paging 구현 (기초)  (0) 2023.04.13
Paging overview  (0) 2023.04.12
Android Studio Giraffe 신기능 정리  (0) 2023.02.18
App Startup  (0) 2023.01.25
AndroidX Collection Library  (0) 2022.12.25
Comments