Visão geral da biblioteca Paging Parte do Android Jetpack

A biblioteca Paging ajuda a carregar e mostrar páginas de um conjunto de dados maior do armazenamento local ou da rede. Essa abordagem permite que o app use a largura de banda da rede e os recursos do sistema de modo mais eficiente. Os componentes da biblioteca Paging foram projetados para se ajustar à arquitetura de apps Android recomendada, integrar-se de forma limpa a outros componentes do Jetpack e fornecer suporte de alto nível ao Kotlin.

Benefícios do uso da biblioteca Paging

A biblioteca Paging inclui os seguintes recursos:

  • Armazenamento em cache na memória dos dados paginados. Isso garante que seu app use recursos do sistema de maneira eficiente enquanto trabalha com dados paginados.
  • Eliminação de duplicação de solicitações incorporadas, o que ajuda a garantir que seu app use a largura de banda da rede e os recursos do sistema de forma eficiente.
  • Adaptadores RecyclerView configuráveis que solicitam automaticamente os dados à medida que o usuário rola para o final dos dados carregados.
  • Suporte de alto nível a corrotinas e fluxos do Kotlin, além de LiveData e RxJava.
  • Suporte integrado ao tratamento de erros, incluindo recursos de atualização e repetição.

Enviar feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver sugestões para melhorar essa biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.

Criar novo problema

Consulte a documentação do Issue Tracker para mais informações sobre como enviar feedback.

Configurar

Para importar componentes da biblioteca Paging para seu app Android, adicione as seguintes dependências ao arquivo build.gradle do app:

Groovy

dependencies {
  def paging_version = "3.3.2"

  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:3.3.2"
}

Kotlin

dependencies {
  val paging_version = "3.3.2"

  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:3.3.2")
}

Arquitetura da biblioteca

Os componentes da biblioteca Paging operam em três camadas do app:

  • Camada de repositório
  • Camada ViewModel
  • Camada da interface
Uma imagem mostrando fluxos de dados paginados dos componentes PagingSource ou RemoteMediator na camada do repositório ao componente Pager na camada ViewModel.
    Em seguida, o componente Pager expõe um fluxo de PagingData ao
    PagingDataAdapter na camada da interface.
Figura 1. Um exemplo de como a biblioteca Paging se encaixa na arquitetura do app.

Esta seção descreve os componentes da biblioteca Paging que operam em cada camada e como eles funcionam juntos para carregar e exibir dados paginados.

Camada de repositório

O principal componente da biblioteca Paging na camada de repositório é PagingSource. Cada objeto PagingSource define uma fonte de dados e como recuperar dados dela. Um objeto PagingSource pode carregar dados de uma única fonte, incluindo fontes de rede e bancos de dados locais.

Outro componente da biblioteca Paging que você pode usar é RemoteMediator. Um objeto RemoteMediator processa a paginação de uma fonte de dados em camadas, como uma fonte de dados de rede com um cache de banco de dados local.

Camada ViewModel

O componente Pager fornece uma API pública para criar instâncias de PagingData que são expostas em fluxos reativos, com base em um objeto PagingSource e em um objeto de configuração PagingConfig.

O componente que conecta a camada ViewModel à IU é PagingData. Um objeto PagingData é um contêiner para um snapshot de dados paginados. Ele consulta um objeto PagingSource e armazena o resultado.

Camada de IU

O componente principal da biblioteca Paging na camada da IU é PagingDataAdapter, um adaptador RecyclerView que processa dados paginados.

Se preferir, use o componente AsyncPagingDataDiffer incluído para criar seu próprio adaptador personalizado.

Outros recursos

Para saber mais sobre a biblioteca Paging, consulte os seguintes recursos extras:

Codelabs

Exemplos