Giới thiệu Paging library

Paging library giúp bạn tải và hiển thị các trang dữ liệu của một tập dữ liệu lớn hơn từ bộ nhớ cục bộ hoặc qua mạng. Phương pháp này cho phép ứng dụng sử dụng cả băng thông mạng và tài nguyên hệ thống một cách hiệu quả hơn. Các thành phần của thư viện Paging được thiết kế để phù hợp với cấu trúc ứng dụng Android được đề xuất, tích hợp mượt mà với các thành phần khác của Jetpack và cung cấp khả năng hỗ trợ Kotlin hàng đầu..

Lợi ích Paging library

  • Tránh lặp dữ liệu
  • Sử dụng dữ liệu cả ở cục bộ và network đem lại hiệu năng và trải nghiệm tốt hơn
  • Tự động load dữ liệu mới khi người dùng scroll
  • Cung cấp các cấu hình PageSize, InitialSize, PreLoad
  • Support tốt với Flow, LiveData và RxJava
  • Cung cấp các chức năng Error Handle, Refresh, Retry, Jump ThresHold, Placeholder

Hạn chế Paging library

  • Không linh hoạt trong chỉnh sửa dữ liệu đầu vào
  • Không linh hoạt trong việc cập nhật dữ liệu
  • Chưa hỗ trợ tốt cho filter, sort, transform dữ liệu

Thích hợp với

  • Danh sách dữ liệu lớn
  • Dữ liệu đầu vào nên là bất biến
  • Không yêu cầu các chức năng truy vấn dữ liệu phức tạp trên dữ liệu

Setup

image

Cấu trúc thư viện

Các thành phần của thư viện Paging hoạt động trong 3 lớp của ứng dụng:

image

PagingSource Example

Là class quản lý các hành vi truy vấn dữ liệu từ network và trả về cho Pager

image

image

Remote Mediator Example 

Là class quản lý các hành vi truy vấn dữ liệu từ network và nạp vào cơ sở dữ liệu RoomDataBase

image

image

image

Pager Example 

Là class để cấu hình các loại dữ liệu như PageSize, InitialSize, PreSize,… và trả về Flow PagingData cho UI

image

image

Transform pager

Thực hiện các phép biến đổi trên dữ liệu Flow của pager trả về

image

image

image

PagingDataAdapter Example

Tương tự như các adapter khác của recyclerView nhưng có thể xác định event scroll của người dùng để tự động gọi event load data.

PagingDataAdapter nhận giá trị đầu vào là 1 DiffUitl dùng để phân biệt thay đổi dữ liệu của item sau đó tiến hành vẽ lại view qua onBindViewHolder

image