일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- El
- Kotlin
- 팩토리 메소드
- designPattern
- PrototypePattern
- 추상 팩토리
- Observer Pattern
- ㅓ
- F
- 디자인패턴 #
- ㅋㅁ
- 옵저버 패턴
- Singleton
- a
- 싱글톤
- Design Pattern
- 빌터패턴
- 디자인패턴
- 함수형프로그래밍
- 프로토타입 패턴
- Abstract Factory
- builderPattern
- 추상팩토리패턴
- r
- factory method
- 코틀린
- Functional Programming
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
네트워크 및 데이터베이스의 페이징. 본문
네트워크 연결이 불안정하거나 네트워크에 연결이 되어있지 않은 경우 사용자 앱 사용자 경험 상승.
---> 네트워크와 로컬 데이터베이스에서 동시에 페이징하는 것
데이터 로드 조정하기
페이징 라이브러리는 사용 사례에 맞는 RemoteMediator 구성요소를 제공
RemoteMediator는 앱이 캐시된 데이터()를 모두 사용한 경우 페이징 라이브러리에서 보내는 신호 역할을 합니다.
신호를 사용하여 네트워크에서 추가적으로 데이터를 로드하고 로컬 데이터베이스에 저장합니다.
PagingSource는 로컬 데이터베이스에서 데이터를 로드하고 표시할 UI에 제공합니다.
RemoteMediator
load( ) 구현
- 정지 함수이므로 장기 작업을 안전하게 실행할 수 있습니다.
- 네트워크 소스에서 새로운 데이터를 가져와서 로컬 저장소에 저장합니다.
이 프로세스는 새 데이터를 사용하지만, 시간이 지나면 데이터베이스에 저장된 데이터를 무효화해야 합니다(예: 사용자가 수동으로 새로고침하는 경우). 데이터가 무효화되었는지는 load() 메서드에 전달된 LoadType 속성으로 표시됩니다.
LoadType은 RemoteMediator에 기존 데이터를 REFRESH할지 아니면 기존 목록의 앞이나 뒤에 추가할 데이터를 가져올지 여부를 알려 줍니다. 이런 방식으로 RemoteMediator는 앱이 사용자가 원하는 데이터를 적절한 순서로 로드하도록 합니다.
네트워크에서 직접 페이징하는 경우의 페이징 생명주기
PagingSource 및 RemoteMediator를 사용하는 페이징 수명 주기
RemoteMediator는 데이터 흐름을 변경합니다.
PagingSource는 계속 데이터를 로드하지만, 페이징된 데이터를 다 소진하면 페이징 라이브러리가 RemoteMediator를 트리거하여 네트워크 소스에서 새 데이터를 로드합니다.
RemoteMediator는 새 데이터를 로컬 데이터베이스에 저장하므로 ViewModel의 인메모리 캐시는 필요하지 않습니다.
마지막으로 PagingSource는 자신을 직접 무효화하며 Pager는 새 인스턴스를 생성하여 데이터베이스에서 새 데이터를 로드합니다.
기본 사용법
RemoteMediator 구현은 네트워크에서 페이징된 데이터를 데이터베이스로 로드하는 데 도움이 되지만, 데이터를 UI로 직접 로드하지는 않습니다.
대신 이 앱은 데이터베이스를 단일 소스 저장소로 사용합니다. 즉, 앱은 데이터베이스에 캐시된 데이터만 표시합니다.
PagingSource 구현은 캐시된 데이터를 데이터베이스에서 UI로 로드하는 작업을 처리합니다.
'Android Jetpack Architecture > Paging3' 카테고리의 다른 글
paging3 race conditions 처리와 remote keys 관리하기 (0) | 2021.08.19 |
---|---|
RemoteMediator 구현하기 (0) | 2021.08.19 |
UI에 페이징된 데이터 표시 (0) | 2021.08.19 |
PagingDataAdapter 정의하기. (0) | 2021.08.19 |
PagingData 스트림 설정(Pager 객체 만들기) (0) | 2021.08.19 |