पेजिंग लाइब्रेरी की खास जानकारी, जो 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")
}

शानदार

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 कॉम्पोनेंट तक जाता है.
    इसके बाद, पेजर कॉम्पोनेंट, यूज़र इंटरफ़ेस (यूआई) लेयर में मौजूद लेज़ी लेआउट कॉम्पोनेंट को PagingData का फ़्लो दिखाता है.
पहली इमेज. यह उदाहरण दिखाता है कि पेजिंग लाइब्रेरी, आपके ऐप्लिकेशन के आर्किटेक्चर में कैसे फ़िट होती है.

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

रिपॉज़िटरी लेयर

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

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

ViewModel लेयर

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

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

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

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

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

@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()
            }
        }
    }
}

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