[TIL] 20201215

todo

What I learned

  • 시스템은 ViewModel 인스턴스를 lifecycleOwner 의 lifecycle 동안만 메모리에 유지시킨다. (장기 저장소에 유지하지 않음.)

  • ViewModel에 Context 또는 View 에 대한 참조를 저장하지 말자. -> 메모리 누수 발생 가능.
    • ViewModel의 onCleared() 는 observer의 구독을 취소/삭제하지만, Context 또는 View에 대한 참조까지 끊지는 않는다.
  • LiveDatalifecycle-aware Observable로, active한 observer들(LifecycleOwner) 에게만 notify를 시킨다.
    • STARTED or RESUMED.
  • AppCompatActivity 를 쭉 따라가다보면 ComponentActivity를 만나게 되는데, LifecycleOwner 를 구현하고있음을 알 수 있다.
    • 현재 lifecycle 상태를 알리는 Observable, LifecycleOwner
public class ComponentActivity 
        extends androidx.core.app.ComponentActivity
        implements LifecycleOwner, //
  • LiveData 의 setValue()는 메인스레드에서만 호출 가능하다. 백그라운드 스레드에서는 postValue() 를 사용.

  • lifecycle-viewmodel-savedstate 모듈도 ViewModel 상태를 지속(persist) 시키기 위해 onSaveInstanceState()onRestoreInstanceState() 를 사용하지만, 작업을 편리하게 해준다.

  • Fragment 에서 액티비티는 requireActivity()로 얻는다.

Tags:

Categories:

Updated:

Leave a comment