Android Jetpack: LiveData

LYLA FUJIWARA : Google I / O 2017에서, 우리는 라이프 사이클 라이브러리를 발표했습니다 메모리 누출을 피하기위한 일련의 라이브러리 및 지침 일반적인 Android 수명주기 문제를 해결할 수 있습니다

라이프 사이클 라이브러리는 20을 기록했습니다 또한 이제는 Jetpack의 일부이며 새로운 통합이 포함됩니다 데이터 바인딩 이것은 Lifecycle 라이브러리의 LiveData 클래스 둘러보기입니다

LiveData는 관찰 가능한 데이터 홀더 클래스입니다 또한 라이프 사이클을 인식합니다 예제를 살펴 보겠습니다 당신은 당신의 UI를 가질 것입니다 이 LiveData 객체를 갖게 될 것입니다

화면에 표시 할 데이터가 있습니다 UI는 LiveData 객체를 관찰합니다 이는 UI에 업데이트 알림이 표시되기를 원하는 것과 같습니다 따라서 LiveData가 변경되면, UI가 알림을 받고 UI가 표시됩니다 새 데이터로 다시 그릴 수 있습니다

간단히 말해서 LiveData를 사용하면 데이터와 동기화되어 화면에 어떤 일이 일어나고 있는지 자, 실제 코드가 있습니다 LiveData 객체는 일반적으로 ViewModel 클래스에 보관됩니다 ViewModel이 무엇인지 확실하지 않으면 걱정할 필요가 없습니다 비디오를 확인하십시오

액티비티를 만들고 ViewModel을 만들고 있다고 가정 해 보겠습니다 사용자 프로필 이 사용자 LiveData 객체가 있습니다 이 객체는 User 객체를 포함합니다 자, 이제 너의 활동을 끝내고, ViewModel 클래스에서 해당 LiveData를 가져옵니다 LiveData에서 호출을 관찰합니다

첫 번째 인수에 대해서는 UI를 전달하고, 이 경우 활동 두 번째 인수는 "관찰자"이며, 이것은 단지 콜백 일 뿐이다 여기에서 코드를 호출하여 UI를 업데이트합니다 이제 LiveData를 호출하여 변경할 수 있습니다 setValue 또는 postValue

UI 스레드에서 실행중인 경우 setValue를 사용하고, 백그라운드 스레드에서 실행중인 경우 postValue를 사용하십시오 setValue 또는 postValue가 호출 될 때, LiveData는 활성 관찰자에게 알립니다 Android Studio 31 이상을 사용하는 경우, LiveData와 ViewModel은 Databinding과 함께 작동합니다 일반적으로 View Model을 바인딩하고 바인딩 할 것입니다

ViewModel에서 설명하는 XML 레이아웃으로 비디오 이제 ViewModel과 Databinding을 연결 한 후 레이아웃을 추가하려면이 단일 행 변경을 추가하면됩니다 귀하의 LiveData가 올바르게 관찰되도록 XML에 바인딩 될 때 이제 XML의 참조를 ViewModel에 포함시킬 수 있습니다 LiveData는 함께 저장됩니다

데이터 바인딩을 사용하는 경우 더 이상 수동으로 설정하지 않아도됩니다 이 관찰자들 따라서이 LiveData 옵저버 코드를 만드는 대신 내가 너에게 보여 줬던 그 모든 상용구를 제거하십시오 대신, TextView의 XML은 LiveData를 참조합니다 직접

LiveData를 다른 관찰 가능 항목과 다른 점 그것은 또한 생명주기를 인식하고 있다는 것입니다 즉, UI가 화면에 있는지, 오프 스크린 또는 파괴 LiveData는 UI 상태에 대해 알고 있습니다 당신이 Observe를 부를 때 당신이 그것을 통과했기 때문입니다 OK, LiveData의 라이프 사이클의 이점은 다음과 같습니다

인식 그러니 당신의 활동이 스크린 상에 없다고 가정 해 봅시다 LiveData는 쓸모없는 UI 업데이트를 실행하지 않습니다 액티비티 또는 UI가 삭제되면, 관측 연결은 자동으로 정리됩니다 LiveData

따라서 우연히 방아쇠를 당길 수는 없습니다 오프 스크린이거나 파괴 된 활동이나 단편 자체를 다시 그립니다 이것은 인터페이스와 클래스들 때문에 부분적으로 가능하다 또한 라이프 사이클 라이브러리에서 프레임 워크 클래스에서 사용됩니다 이 수업은 – 라이프 사이클은 Android를 나타내는 객체입니다

라이프 사이클 및 상태; LifecycleOwner는 다음과 같은 객체에 대한 인터페이스입니다 AppCompatActivity와 같은 라이프 사이클이있다 또는 활동 프래그먼트; 마지막으로 LifecycleObserver, 이것은 라이프 사이클을 관찰하기위한 인터페이스이다 좋습니다, 그래서 LiveData는 수명주기 관찰자입니다 그것은 당신의 필요를 추상화합니다

활동 또는 요소 화 된 수명주기를 직접 처리 할 수 ​​있습니다 이것이 바로 LiveData로 작업 할 때 필요한 기본 사항입니다 왜 유용할까요? 좀 더 복잡한 사용법에 대해서도 언급 할 것입니다 방은 LiveData와 잘 작동하도록 제작되었습니다 방은 자동으로 LiveData 객체를 반환 할 수 있습니다

데이터베이스 데이터가 변경되고 데이터가있을 때 알림 백그라운드 스레드에로드됩니다 이렇게하면 UI를 쉽게 업데이트 할 수 있습니다 데이터베이스가 업데이트됩니다 소개의 방에 대해 더 자세히 알아볼 수 있습니다 룸 비디오

또한 LiveData는 map, switchMap 및 MediatorLiveData라는 클래스 사용자 정의 변환을위한 것입니다 지도를 사용하면 LiveData A의 출력에 함수를 적용 할 수 있습니다 결과를 LiveData B로 다운 스트림 전파하십시오 예를 들어, LiveData를 사용하여 사용자 객체를 가져올 수 있습니다 대신에 사용자의 결합 된 문자열을 출력합니다 이름과 성

SwitchMap 함수 변환 지도와 많이 비슷하지만 매핑 기능을 위해 값 대신 LiveData를 방출합니다 예를 들어 여기에 사용자가 많은 경우, 아마도 룸 데이터베이스에 저장되어있을 것입니다 이러한 사용자를위한 검색 기능이있을 수 있습니다 switchMap을 사용하면 사용자 ID에 대한 LiveData를 갖게됩니다 ID가 변경 될 때마다 사용자 조회 기능 이 ID로 호출됩니다

이제 LiveData는 새로 발견 된 사용자를 참조합니다 LiveData 좋아, 그럼 얼마나 많은 시간이 있더라도 이 조회 함수를 호출하고 다른 LiveData를 가져오고, 귀하의 UI는 LiveData 결과를 한 번만 관찰하면됩니다 switchMap의 힘입니다 이제 자신 만의 맞춤 데이터를 만들고 싶다면 변형, 당신은 봐야한다 MediatorLiveData 클래스에서

MediatorLiveData에는 추가 및 제거 방법이 포함되어 있습니다 원본 LiveData 개체 그러면 이벤트를 결합하고 전파 할 수 있습니다 이러한 모든 소스의 다운 스트림 LiveData 시작하기는 간단합니다

그러나 실험을위한 많은 잠재력이있다 이 수명주기를 관찰 할 수 있어야합니다 바라기를 이것은 당신에게 뭔가를 키우는 데 영감을주었습니다 그리고 언제나처럼, 문서는 링크되어 있습니다