Sayfalama Neden Kullanılır
Her şeyi tek seferde yüklemenin maliyeti.
Sayfalama Neden Kullanılır, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 4 dersten oluşur.
Her Şeyi Yüklemek Maliyetlidir
50.000 öğeden oluşan bir akış düşünün. Tümünü aynı anda getirip bellekte tutarsanız bellek israfına, ağın yavaşlamasına ve yanıt ayrıştırılırken kullanıcı arayüzünün donmasına neden olursunuz.
Çoğu kullanıcı yalnızca ilk birkaç ekranda gezinir. Sayfalama, verilerin tamamını baştan yüklemek yerine kullanıcı kaydırdıkça küçük parçalar (sayfalar) hâlinde yüklenmesi anlamına gelir.
Koddaki Sorun
Saf bir yaklaşım, listenin tamamını belleğe yükler. Sunucu bunu desteklese bile yanıt çok büyük olabilir ve ayrıştırılmış liste yığının büyük bölümünü kaplar.
Bu kalıp ölçeklenebilir değildir ve büyük veri kümelerinde OutOfMemoryError oluşmasına neden olabilir.
// 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) }
}Bir Sayfa Nasıl Görünür
Sayfa, genellikle 20-50 öğeden oluşan veri kümesinin küçük bir bölümüdür. Sunucu, bir sayfayla birlikte sonraki sayfaya işaret eden bir değer (sayı, uzaklık veya belirteç) döndürür.
Uygulama bellekte yalnızca birkaç sayfa tutar ve kullanıcı bunlardan uzaklaştıkça eski sayfaları atar.
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): ArticlePagePaging 3 ile Tanışın
Paging 3, sayfalama işleminin tüm zor kısımlarını sizin için yöneten Jetpack kitaplığıdır:
- Kullanıcı listenin sonuna yaklaştığında sonraki sayfayı isteme
- Bellekte yalnızca bir öğe aralığı tutma
- Yükleme ve hata durumlarını sunma
- Koroutinler, Flow ve Jetpack Compose için yerleşik destek
Bağımlılığı Ekleme
Paging 3 ayrı yapılar halinde sunulur: bir çalışma zamanı ve bir Compose entegrasyonu. Bunları modülünüzün build.gradle.kts dosyasına ekleyin.
paging-compose yapısı, LazyColumn için yardımcılar sağlar.
// build.gradle.kts (module)
dependencies {
val pagingVersion = "3.3.6"
implementation("androidx.paging:paging-runtime:$pagingVersion")
implementation("androidx.paging:paging-compose:$pagingVersion")
}Üç Temel Parça
Paging 3, tekrar tekrar kullanacağınız üç tür etrafında şekillenir:
- PagingSource - bir kaynaktan tek bir sayfanın nasıl yükleneceğini bilir
- Pager - sayfalı veri akışını yapılandırır ve üretir
- PagingData -
Flowolarak yayımlanan öğe kapsayıcısıdır
Sonraki derslerde bunların her birini oluşturacağız.
PagingData ve Flow
Deponuz bir Flow<PagingData<T>> sunar. Kullanıcı arayüzü bunu toplar ve o anda yüklenmiş olan öğeleri görüntüler.
Tam listeyi kendiniz hiçbir zaman oluşturmazsınız; Paging, öğeleri gerektiğinde kullanıcı arayüzüne akıtır.
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 Pencereyi Denetler
PagingConfig, Paging'in verileri nasıl yükleyip tutacağını ayarlar:
pageSize- her sayfa isteğindeki öğe sayısıprefetchDistance- sonraki yüklemeyi tetiklemek için kenardan ne kadar uzakta olunması gerektiğienablePlaceholders- henüz yüklenmemiş öğeler için yer tutucu alanların gösterilip gösterilmeyeceğimaxSize- bellekte tutulan öğe sayısının üst sınırı
import androidx.paging.PagingConfig
val config = PagingConfig(
pageSize = 20,
prefetchDistance = 5,
enablePlaceholders = false,
maxSize = 100
)Ağ mı, Veritabanı mı, Yoksa İkisi de mi
Bir PagingSource, bir REST API'sinden, Room veritabanından veya herhangi bir özel kaynaktan veri alabilir.
Gerçek anlamda çevrimdışı öncelikli bir deneyim için ikisini bir RemoteMediator ile birleştirirsiniz (son derste ele alınacaktır): ağ, yerel veritabanını doldurur ve kullanıcı arayüzü sayfaları bu veritabanından alır.
Akıcı Kaydırma, Daha Az Bellek
Sayfalama ile her istek küçük olduğundan ve bellek içi pencerenin boyutu maxSize ile sınırlandığından kaydırma akıcı kalır.
Yükleme ve hata göstergeleri LoadState aracılığıyla hazır gelir; böylece manuel durum takibi yapmadan altta bir döndürücü veya yeniden deneme düğmesi gösterebilirsiniz.
// 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()
}Sayfalama Ne Zaman Gereklidir
Şu durumlarda Paging 3'ü tercih edin:
- Veri kümesi büyük veya sınırsızsa (akışlar, arama sonuçları, sohbet geçmişi)
- Veriler sayfalar veya imleçler döndüren bir ağ API'sinden geliyorsa
- Otomatik yükleme/hata kullanıcı arayüzü ve bellek denetimi istiyorsanız
Kısa ve sabit bir liste (ayarlar menüsü gibi) için düz bir LazyColumn daha basittir ve tamamen yeterlidir.
Kısa Kontrol
Büyük bir listede Paging 3 kullanmanın temel yararı nedir?
Özet: Sayfalama Neden Kullanılır
Her şeyi tek seferde yüklemenin performansı ve belleği neden olumsuz etkilediğini ve Paging 3'ün bunu nasıl çözdüğünü öğrendiniz.
- Veriler, kullanıcı kaydırdıkça küçük sayfalar halinde yüklenir
- Üç temel parça PagingSource, Pager ve PagingData'dir
PagingConfig, sayfa boyutunu, önceden getirmeyi ve bellek penceresini ayarlar- Paging; koroutinler, Flow ve Compose ile bütünleşir ve yükleme/hata durumlarını hazır olarak sağlar
Sırada: bir PagingSource oluşturmak ve bunu bir Pager'a bağlamak var.
Sıkça Sorulan Sorular
“Sayfalama Neden Kullanılır” dersi ücretsiz mi?
Evet — “Sayfalama Neden Kullanılır” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 4 dersten oluşur.
“Sayfalama Neden Kullanılır” dersinde ne öğreneceğim?
Her şeyi tek seferde yüklemenin maliyeti. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Android Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Sayfalama Neden Kullanılır” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Sayfalama Neden Kullanılır
- PagingSource ve Pager
- Compose Listelerinde Sayfalama
- RemoteMediator ve Önbelleğe Alma