पेजिंग लाइब्रेरी के बारे में खास जानकारी   Android Jetpack का हिस्सा.

पेजिंग लाइब्रेरी की मदद से, लोकल स्टोरेज या नेटवर्क से बड़े डेटासेट के डेटा के पेज लोड किए जा सकते हैं और दिखाए जा सकते हैं. इस तरीके से, आपका ऐप्लिकेशन नेटवर्क बैंडविड्थ और सिस्टम के संसाधनों, दोनों का ज़्यादा बेहतर तरीके से इस्तेमाल कर पाता है. पेजिंग लाइब्रेरी के कॉम्पोनेंट, सुझाए गए Android ऐप्लिकेशन आर्किटेक्चर के हिसाब से डिज़ाइन किए गए हैं. ये कॉम्पोनेंट, अन्य Jetpack कॉम्पोनेंट के साथ आसानी से इंटिग्रेट हो जाते हैं. साथ ही, Kotlin के लिए बेहतरीन सहायता उपलब्ध कराते हैं.

पेजिंग लाइब्रेरी इस्तेमाल करने के फ़ायदे

पेजिंग लाइब्रेरी में ये सुविधाएं शामिल हैं:

  • पेज किए गए डेटा के लिए, इन-मेमोरी कैश मेमोरी. इससे यह पक्का करने में मदद मिलती है कि पेज किए गए डेटा के साथ काम करते समय, आपका ऐप्लिकेशन सिस्टम के संसाधनों का बेहतर तरीके से इस्तेमाल करे.
  • इसमें डुप्लीकेट अनुरोधों को हटाने की सुविधा पहले से मौजूद होती है. इससे यह पक्का करने में मदद मिलती है कि आपका ऐप्लिकेशन, नेटवर्क बैंडविथ और सिस्टम के संसाधनों का बेहतर तरीके से इस्तेमाल करे.
  • Kotlin कोरूटीन और फ़्लो के लिए बेहतरीन सहायता.
  • गड़बड़ियों को ठीक करने के लिए पहले से मौजूद सहायता. इसमें रीफ़्रेश करने और फिर से कोशिश करने की सुविधाएं शामिल हैं.

सेटअप

अपने Android ऐप्लिकेशन में पेजिंग कॉम्पोनेंट इंपोर्ट करने के लिए, अपने ऐप्लिकेशन की build.gradle फ़ाइल में ये डिपेंडेंसी जोड़ें:

Kotlin

dependencies {
  val paging_version = "3.4.2"

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

  // Jetpack Compose integration
  implementation("androidx.paging:paging-compose:$paging_version")
}

Groovy

dependencies {
  def paging_version = "3.4.2"

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

  // Jetpack Compose integration
  implementation "androidx.paging:paging-compose:$paging_version"
}

लाइब्रेरी आर्किटेक्चर

पेजिंग लाइब्रेरी के कॉम्पोनेंट, आपके ऐप्लिकेशन की तीन लेयर में काम करते हैं:

  • रिपॉज़िटरी लेयर
  • ViewModel लेयर
  • यूज़र इंटरफ़ेस (यूआई) लेयर
इस इमेज में, रिपॉज़िटरी लेयर में मौजूद PagingSource या RemoteMediator कॉम्पोनेंट से, ViewModel लेयर में मौजूद Pager कॉम्पोनेंट तक पेज किए गए डेटा का फ़्लो दिखाया गया है.
    इसके बाद, Pager कॉम्पोनेंट, यूज़र इंटरफ़ेस (यूआई) लेयर में लेज़ी लेआउट कॉम्पोनेंट को PagingData का फ़्लो दिखाता है.
पहली इमेज. एक उदाहरण, जिससे पता चलता है कि पेजिंग लाइब्रेरी आपके ऐप्लिकेशन के आर्किटेक्चर में कैसे फ़िट होती है.

इस सेक्शन में, हर लेयर पर काम करने वाले Paging लाइब्रेरी के कॉम्पोनेंट के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि वे पेज पर मौजूद डेटा को लोड करने और दिखाने के लिए, एक साथ कैसे काम करते हैं.

डेटा स्टोर करने की जगह वाली लेयर

रिपॉज़िटरी लेयर में मुख्य पेजिंग लाइब्रेरी कॉम्पोनेंट, PagingSource है. हर PagingSource ऑब्जेक्ट, डेटा का सोर्स तय करता है. साथ ही, यह बताता है कि उस सोर्स से डेटा कैसे वापस पाया जाए. PagingSource ऑब्जेक्ट, किसी भी सोर्स से डेटा लोड कर सकता है. इसमें नेटवर्क सोर्स और लोकल डेटाबेस शामिल हैं.

पेजिंग लाइब्रेरी का एक और कॉम्पोनेंट, जिसका इस्तेमाल किया जा सकता है वह है RemoteMediator. RemoteMediator ऑब्जेक्ट, लेयर्ड डेटा सोर्स से पेजिंग को मैनेज करता है. जैसे, लोकल डेटाबेस कैश मेमोरी वाला नेटवर्क डेटा सोर्स.

ViewModel लेयर

Pager कॉम्पोनेंट, PagingData के इंस्टेंस बनाने के लिए एक सार्वजनिक एपीआई उपलब्ध कराता है. ये इंस्टेंस, PagingSource ऑब्जेक्ट और PagingConfig कॉन्फ़िगरेशन ऑब्जेक्ट के आधार पर, रिएक्टिव स्ट्रीम में दिखते हैं.

ViewModel लेयर को यूज़र इंटरफ़ेस (यूआई) से कनेक्ट करने वाला कॉम्पोनेंट, PagingData है. PagingData ऑब्जेक्ट, पेज में बांटे गए डेटा के स्नैपशॉट के लिए एक कंटेनर होता है. यह PagingSource ऑब्जेक्ट को क्वेरी करता है और नतीजे को सेव करता है.

यूज़र इंटरफ़ेस (यूआई) लेयर

प्राइमरी पेजिंग यूज़र इंटरफ़ेस (यूआई) एपीआई, collectAsLazyPagingItems() है. यह पेज पर मौजूद आइटम को डेटा की सूची के तौर पर दिखाता है. इसे Compose के लेज़ी लेआउट कॉम्पोनेंट, जैसे कि LazyColumn और LazyRow आसानी से इस्तेमाल कर सकते हैं.

Compose के साथ काम करने वाले एपीआई इस्तेमाल करने के लिए, androidx.paging:paging-compose लाइब्रेरी जोड़ें. इससे यूज़र इंटरफ़ेस (यूआई), डेटा लोड होने, अपडेट होने, और गड़बड़ियों पर अपने-आप प्रतिक्रिया दे सकता है. इसके लिए, अडैप्टर या डिफ़िंग लॉजिक की ज़रूरत नहीं होती. Flow<PagingData> पर collectAsLazyPagingItems() एक्सटेंशन फ़ंक्शन का इस्तेमाल करें, ताकि LazyColumn में items() को रिटर्न किया गया LazyPagingItems पास किया जा सके.

@Composable
fun MessageList(pager: Pager<Int, Message>) {
    val lazyPagingItems = pager.flow.collectAsLazyPagingItems()

    LazyColumn {
        items(
            lazyPagingItems.itemCount,
            key = lazyPagingItems.itemKey { it.id }
        ) { index ->
            val message = lazyPagingItems[index]
            if (message != null) {
                MessageRow(message)
            } else {
                MessagePlaceholder()
            }
        }
    }
}

ज़्यादा जानकारी के लिए, बड़े डेटा-सेट (पेजिंग) लेख पढ़ें.