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

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

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

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

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

सेटअप

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

Kotlin

dependencies {
  val paging_version = "3.5.3"

  // Needed for Android Views and LiveData. Optional if only using
  // paging-compose
  implementation("androidx.paging:paging-runtime:$paging_version")

  // Needed to collect PagingData flows in Jetpack Compose
  implementation("androidx.paging:paging-compose:$paging_version")

  // Needed to test PagingSource and PagingData transformations in isolation
  testImplementation("androidx.paging:paging-testing:$paging_version")
}

Groovy

dependencies {
  def paging_version = "3.5.3"

  // Needed for Android Views and LiveData. Optional if only using
  // paging-compose
  implementation "androidx.paging:paging-runtime:$paging_version"

  // Needed to collect PagingData flows in Jetpack Compose
  implementation "androidx.paging:paging-compose:$paging_version"

  // Needed to test PagingSource and PagingData transformations in isolation
  testImplementation "androidx.paging:paging-testing:$paging_version"
}

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

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

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

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

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

डेटा स्टोर करने की लेयर में, 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()
            }
        }
    }
}

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