Pourquoi utiliser la pagination
Le coût du chargement de toutes les données en une seule fois.
Pourquoi utiliser la pagination est une leçon Android Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Android Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Android Academy comprend 4 leçons au total.
Tout charger coûte cher
Imaginez un fil contenant 50 000 éléments. Si vous les récupérez et les conservez tous en même temps, vous gaspillez de la mémoire, ralentissez le réseau et figez l'interface pendant l'analyse de la réponse.
La plupart des utilisateurs ne font défiler que les premiers écrans. La pagination consiste à charger les données par petits blocs (pages) au fur et à mesure du défilement, plutôt que de tout charger dès le départ.
Le problème dans le code
Une approche naïve charge la liste complète en mémoire. Même si le serveur la prend en charge, la réponse peut être volumineuse et la liste analysée occupe la majeure partie du tas.
Ce modèle ne passe pas à l’échelle et risque de provoquer une erreur OutOfMemoryError avec de grands jeux de données.
// Anti-pattern: load the whole table at once
suspend fun loadAllArticles(): List<Article> {
// Could be tens of thousands of rows / megabytes of JSON
return api.getArticles(limit = 50_000)
}
// UI holds ALL of them in memory at once
val articles = loadAllArticles()
LazyColumn {
items(articles) { article -> ArticleRow(article) }
}À quoi ressemble une page
Une page est une petite portion du jeu de données, souvent composée de 20 à 50 éléments. Le serveur renvoie une page ainsi qu’un pointeur vers la page suivante (un nombre, un décalage ou un jeton).
L’application ne conserve que quelques pages en mémoire et élimine les anciennes lorsque l’utilisateur s’en éloigne en faisant défiler la liste.
data class ArticlePage(
val items: List<Article>,
val nextKey: Int? // null means no more pages
)
// Example REST call returning one page
suspend fun getArticlePage(page: Int, size: Int = 20): ArticlePageDécouvrez Paging 3
Paging 3 est la bibliothèque Jetpack qui prend en charge pour vous tous les aspects complexes de la pagination :
- Demander la page suivante lorsque l’utilisateur approche de la fin de la liste
- Ne conserver en mémoire qu’une fenêtre d’éléments
- Exposer les états de chargement et d’erreur
- Prendre en charge intégrée les coroutines, Flow et Jetpack Compose
Ajouter la dépendance
Paging 3 est distribué sous forme d’artefacts distincts : un artefact d’exécution et une intégration Compose. Ajoutez-les dans le fichier build.gradle.kts de votre module.
L’artefact paging-compose vous fournit des utilitaires pour LazyColumn.
// build.gradle.kts (module)
dependencies {
val pagingVersion = "3.3.6"
implementation("androidx.paging:paging-runtime:$pagingVersion")
implementation("androidx.paging:paging-compose:$pagingVersion")
}Les trois éléments fondamentaux
Paging 3 s’articule autour de trois types que vous réutiliserez constamment :
- PagingSource - sait charger une page depuis une source
- Pager - configure et produit un flux de données paginées
- PagingData - le conteneur des éléments, émis sous la forme d’un
Flow
Nous allons construire chacun d’eux dans les prochaines leçons.
PagingData et le flux
Votre dépôt expose un Flow<PagingData<T>>. L’interface utilisateur le collecte et affiche les éléments actuellement chargés.
Vous ne composez jamais vous-même la liste complète : Paging transmet les éléments à l’interface utilisateur à la demande.
import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import kotlinx.coroutines.flow.Flow
class ArticleRepository(private val api: ArticleApi) {
fun articles(): Flow<PagingData<Article>> = Pager(
config = PagingConfig(pageSize = 20)
) {
ArticlePagingSource(api)
}.flow
}PagingConfig contrôle la fenêtre
PagingConfig ajuste la manière dont Paging charge et conserve les données :
pageSize- nombre d’éléments par demande de pageprefetchDistance- distance par rapport au bord à laquelle déclencher le chargement suivantenablePlaceholders- afficher des emplacements réservés pour les éléments qui ne sont pas encore chargésmaxSize- nombre maximal d’éléments conservés en mémoire
import androidx.paging.PagingConfig
val config = PagingConfig(
pageSize = 20,
prefetchDistance = 5,
enablePlaceholders = false,
maxSize = 100
)Réseau ou base de données, ou les deux
Un PagingSource peut extraire des données d’une API REST, d’une base de données Room ou de toute source personnalisée.
Pour une véritable expérience hors ligne prioritaire, vous combinez les deux avec un RemoteMediator (présenté dans la dernière leçon) : le réseau alimente une base de données locale et l’interface utilisateur effectue la pagination depuis cette base.
Un défilement fluide, moins de mémoire
Avec la pagination, le défilement reste fluide, car chaque demande est très petite et la fenêtre en mémoire est limitée par maxSize.
Les indicateurs de chargement et d’erreur sont fournis automatiquement par LoadState. Vous pouvez donc afficher un indicateur en bas ou un bouton de nouvelle tentative sans avoir à gérer manuellement leur état.
// LoadState exposes loading/error per direction
when (val state = adapterLoadState.append) {
is LoadState.Loading -> showBottomSpinner()
is LoadState.Error -> showRetry(state.error)
is LoadState.NotLoading -> hideBottomSpinner()
}Quand utiliser la pagination
Utilisez Paging 3 lorsque :
- Le jeu de données est volumineux ou sans limite (flux, résultats de recherche, historique de conversations)
- Les données proviennent d’une API réseau qui renvoie des pages ou des curseurs
- Vous souhaitez une interface de chargement et d’erreur automatique ainsi qu’une gestion de la mémoire
Pour une liste courte et fixe (un menu de paramètres, par exemple), un simple LazyColumn est plus facile et convient parfaitement.
Vérification rapide
Quel est le principal avantage de l’utilisation de Paging 3 pour une grande liste ?
Récapitulatif : pourquoi utiliser Paging
Vous avez appris pourquoi charger tous les éléments en une seule fois nuit aux performances et à la mémoire, ainsi que la manière dont Paging 3 résout ce problème.
- Les données sont chargées par petites pages au fur et à mesure du défilement
- Les trois éléments fondamentaux sont PagingSource, Pager et PagingData
PagingConfigajuste la taille des pages, le préchargement et la fenêtre mémoire- Paging s’intègre aux coroutines, à Flow et à Compose, et fournit automatiquement les états de chargement et d’erreur
Ensuite : créer un PagingSource et le relier à un Pager.
Questions Fréquemment Posées
La leçon « Pourquoi utiliser la pagination » est-elle gratuite ?
Oui — le texte complet de « Pourquoi utiliser la pagination » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Android Academy, passe à CoddyKit PRO. Le cours Android Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Pourquoi utiliser la pagination » ?
Le coût du chargement de toutes les données en une seule fois. Tu pratiques Android Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Android Academy ?
Aucune expérience préalable n'est requise. Android Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Pourquoi utiliser la pagination » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Android Academy ?
Oui. Chaque leçon Android Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Pourquoi utiliser la pagination
- PagingSource et Pager
- Pagination dans les listes Compose
- RemoteMediator et mise en cache