Tổng quan về thư viện Paging   Một phần của Android Jetpack.

Thư viện Paging 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 của việc sử dụng thư viện Paging

Thư viện Paging bao gồm các tính năng sau:

  • Chức năng lưu dữ liệu được phân trang vào bộ nhớ đệm trong bộ nhớ. Chức năng này đảm bảo rằng ứng dụng sử dụng tài nguyên hệ thống một cách hiệu quả trong khi làm việc với dữ liệu được phân trang.
  • Chức năng loại bỏ yêu cầu trùng lặp tích hợp sẵn, đảm bảo rằng ứng dụng sử dụng băng thông mạng và tài nguyên hệ thống một cách hiệu quả.
  • Các bộ chuyển đổi RecyclerView có thể định cấu hình sẽ tự động yêu cầu dữ liệu khi người dùng cuộn đến cuối dữ liệu đã tải.
  • Khả năng hỗ trợ hàng đầu cho các coroutine và Flow Kotlin, cũng như LiveData và RxJava.
  • Tính năng hỗ trợ được tích hợp sẵn để xử lý lỗi, bao gồm khả năng làm mới và thử lại.

Gửi phản hồi

Ý kiến phản hồi của bạn có thể giúp cải thiện Jetpack. Hãy cho chúng tôi biết nếu bạn phát hiện lỗi mới hoặc có ý tưởng cải thiện thư viện này. Vui lòng xem các lỗi hiện có trong thư viện này trước khi báo một lỗi mới. Bạn có thể bình chọn cho lỗi hiện có bằng cách nhấp vào nút dấu sao.

Báo lỗi mới

Xem tài liệu về Công cụ theo dõi lỗi để biết thêm thông tin.

Thiết lập

Để nhập các thành phần Paging vào ứng dụng Android, hãy thêm các phần phụ thuộc sau vào tệp build.gradle của ứng dụng:

Groovy

dependencies {
  def paging_version = "3.1.1"

  implementation "androidx.paging:paging-runtime:$paging_version"

  // alternatively - without Android dependencies for tests
  testImplementation "androidx.paging:paging-common:$paging_version"

  // optional - RxJava2 support
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  // optional - RxJava3 support
  implementation "androidx.paging:paging-rxjava3:$paging_version"

  // optional - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"

  // optional - Jetpack Compose integration
  implementation "androidx.paging:paging-compose:1.0.0-alpha14"
}

Kotlin

dependencies {
  val paging_version = "3.1.1"

  implementation("androidx.paging:paging-runtime:$paging_version")

  // alternatively - without Android dependencies for tests
  testImplementation("androidx.paging:paging-common:$paging_version")

  // optional - RxJava2 support
  implementation("androidx.paging:paging-rxjava2:$paging_version")

  // optional - RxJava3 support
  implementation("androidx.paging:paging-rxjava3:$paging_version")

  // optional - Guava ListenableFuture support
  implementation("androidx.paging:paging-guava:$paging_version")

  // optional - Jetpack Compose integration
  implementation("androidx.paging:paging-compose:1.0.0-alpha14")
}

Cấu trúc thư viện

Thư viện Paging sẽ tích hợp trực tiếp vào cấu trúc ứng dụng Android đề xuất. Các thành phần của thư viện hoạt động trong ba lớp của ứng dụng:

  • Lớp kho lưu trữ
  • Lớp ViewModel
  • Lớp giao diện người dùng
Dữ liệu được phân trang di chuyển từ các thành phần PagingSource hoặc RemoteMediator trong lớp lưu trữ đến thành phần Pager trong lớp ViewModel.
    Sau đó, thành phần Pager sẽ hiển thị một luồng PagingData cho PagingDataAdapter trong lớp giao diện người dùng.
Hình 1. Một ví dụ về cách thư viện Paging nằm vừa vặn trong cấu trúc ứng dụng.

Phần này mô tả các thành phần thư viện Paging hoạt động ở mỗi lớp và cách các thành phần này hoạt động cùng nhau để tải và hiển thị dữ liệu được phân trang.

Lớp kho lưu trữ

Thành phần thư viện Paging chính trong lớp lưu trữ là PagingSource. Mỗi đối tượng PagingSource xác định một nguồn dữ liệu và cách truy xuất dữ liệu từ nguồn đó. Đối tượng PagingSource có thể tải dữ liệu từ bất kỳ nguồn nào, bao gồm cả nguồn trên mạng và cơ sở dữ liệu cục bộ.

Một thành phần khác trong thư viện Paging mà bạn có thể sử dụng là RemoteMediator. Đối tượng RemoteMediator xử lý phân trang từ một nguồn dữ liệu phân lớp, chẳng hạn như nguồn dữ liệu trên mạng có bộ nhớ đệm cơ sở dữ liệu cục bộ.

Lớp ViewModel

Thành phần Pager cung cấp API công khai để tạo các thực thể của PagingData được hiển thị trong các luồng phản ứng, dựa trên đối tượng PagingSource và đối tượng cấu hình PagingConfig.

Thành phần kết nối lớp ViewModel với giao diện người dùng là PagingData. Đối tượng PagingData là một vùng chứa ảnh chụp nhanh của dữ liệu được phân trang. Phương thức này truy vấn một đối tượng PagingSource và lưu trữ kết quả đó.

Lớp giao diện người dùng

Thành phần thư viện Paging chính trong lớp giao diện người dùng là PagingDataAdapter, một bộ chuyển đổi RecyclerView xử lý dữ liệu được phân trang.

Ngoài ra, bạn có thể sử dụng thành phần AsyncPagingDataDiffer có sẵn để tạo bộ chuyển đổi tuỳ chỉnh của riêng mình.

Tài nguyên khác

Để tìm hiểu thêm về thư viện Paging, hãy xem các tài nguyên khác sau đây:

Lớp học lập trình

Mẫu