2019. 9. 14. 15:33ㆍAndroid
# 오늘의 개념 :
Paging Library of Android Jetpack
1. 개념 및 특징
아래는 developer.android.com 에서 설명한 개념이다.
페이징 라이브러리를 사용하면 한 번에 작은 데이터 청크를 로드하고 표시 할 수 있습니다. 요청시 부분 데이터를 로드하면 네트워크 대역폭 및 시스템 리소스 사용이 줄어 듭니다.
이 라이브러리는 Google I/O 2018 에 새로 소개된 Jetpack의 구성요소 중 하나이다. 여기서 Jetpack 이란,
Jetpack은 개발자가 고품질 앱을 손쉽게 개발할 수 있게 돕는 라이브러리, 도구, 가이드 모음입니다. 이 구성요소를 통해 권장사항을 따르고, 상용구 코드 작성에서 벗어나며, 복잡한 작업을 간소화함으로써 중요한 코드에만 집중할 수 있습니다.
Paging library의 특징
-
데이터의 일부분을 점진적으로 불러옴
- 데이터의 크기가 크고, 유한한 데이터 또는 무한한 데이터를 불러올 수 있음
- Recyclerview와 사용
- LiveData 또는 Rxjava와 사용
2. Architecture
- PagedList
DataSource 에서 받아온 데이터를 담는 리스트.
기존 Recyclerview 에 들어가는 ArrayList 와 같은 맥락.
- Data
PagedList의 각 인스턴스는 해당 DataSource 객체에서 앱 데이터의 최신 스냅 샷을 로드.
여기서 DataSource 란, PagedList에 Data를 제공하는 역할을 한다.
Data 유형 (어디로부터 데이터를 받아오는지)
- Network(Retrofit 등 사용)
- Database(SQLite)
- File
- 그 외
DataSource 유형
-
PageKeyedDataSource : 데이터 요청 시, 이전/다음 데이터의 키가 필요한 경우 사용
-
ItemKeyedDataSource : 데이터 요청 시, 이전 데이터의 타임스탬프 등의 특정 요소를 이용하여 로드하는 경우
-
PositionalDataSource : 데이터 요청 시, 페이지 번호 또는 오프셋 등을 이용하여 로드하는 경우. 이 경우, 위의 2개와 달리 페이지 번호를 통해 특정 페이지를 바로 요청할 수 있음
- UI (PagedListAdapter)
PagedList의 데이터를 PagedListAdapter를 이용해 화면에 보여주는 작업.
3. 작동 원리. 어떻게 작동하는가?
1) UI를 ViewModel 과 연결 : LiveData<PagedList> 와 PagedListAdapter 연결
2) LivePagedListBuilder 또는 RxPagedListBuilder 를 사용해 LiveData<PagedList> 와 DataSource 연결
3) 데이터를 불러온 DataSource가 새로운 PagedList객체를 제공
4) 이 새로운 객체를 PagedListAdapter에 전달 => UI 업데이트 (PagedListAdapter는 페이지 로드 이벤트를 PagedList.Callback 을 이용해 처리)
5) 사용자가 리스트 화면을 스크롤하면 -> PagedListAdapter 가 PagedList.loadAround() 호출하여 DataSource에서 가져와야 할 항목에 대한 힌트를 기본 PagedList에 제공
참고 : PagedList는 내용을 변경할 수 없습니다. 즉, 새 컨텐츠를 PagedList의 인스턴스에로드 할 수 있지만로드 된 항목 자체는 로드 된 후에는 변경할 수 없습니다. 따라서 PagedList의 내용이 업데이트되면 PagedListAdapter 객체는 업데이트 된 정보가 포함 된 완전히 새로운 PagedList를받습니다. (출처 : https://developer.android.com/topic/libraries/architecture/paging/ui)
4. 장단점
- 장점
- UI와 분리된 코드
- 많은 비용이 드는 작업을 백그라운드 스레드에서 수행
- 리스트의 Diffing 처리로 효과적인 UI 업데이트
- 스크롤 시 언제 다음 데이터를 로드할 것인지 일일이 체크하지 않아도 됨.
- 단점
- PagedListAdapter 를 통해 아이템을 직접 수정, 삭제, 추가할 수 없음
- 이 외는 더 찾아봐야 할듯 ..
참조
https://developer.android.com/topic/libraries/architecture/paging
https://codelabs.developers.google.com/codelabs/android-paging/#2
https://developer.android.com/jetpack
'Android' 카테고리의 다른 글
Fragment에 대하여 - (1/2) (0) | 2020.03.01 |
---|---|
[Android] DI(의존성 주입)과 Koin에 대하여 (0) | 2019.11.15 |
[Android]Android Architecture Pattern 에 대하여 - (2) MVVM (0) | 2019.10.08 |
[Android] Android Architecture Pattern 에 대하여 - (1) (0) | 2019.09.28 |
[Android] 앱 성능 및 속도 개선 방법 (0) | 2019.09.21 |