পেজিং লাইব্রেরির সংক্ষিপ্ত বিবরণ। এটি অ্যান্ড্রয়েড জেটপ্যাকের একটি অংশ।

পেজিং লাইব্রেরি আপনাকে লোকাল স্টোরেজ বা নেটওয়ার্কের মাধ্যমে একটি বৃহত্তর ডেটাসেট থেকে ডেটার পেজ লোড ও প্রদর্শন করতে সাহায্য করে। এই পদ্ধতি আপনার অ্যাপকে নেটওয়ার্ক ব্যান্ডউইথ এবং সিস্টেম রিসোর্স উভয়ই আরও দক্ষতার সাথে ব্যবহার করতে দেয়। পেজিং লাইব্রেরির কম্পোনেন্টগুলো প্রস্তাবিত অ্যান্ড্রয়েড অ্যাপ আর্কিটেকচারের সাথে মানানসই, অন্যান্য জেটপ্যাক কম্পোনেন্টের সাথে সহজে ইন্টিগ্রেট হয় এবং প্রথম শ্রেণীর কোটলিন সাপোর্ট প্রদান করার জন্য ডিজাইন করা হয়েছে।

পেজিং লাইব্রেরি ব্যবহারের সুবিধা

পেজিং লাইব্রেরিতে নিম্নলিখিত বৈশিষ্ট্যগুলো অন্তর্ভুক্ত রয়েছে:

  • আপনার পেজড ডেটার জন্য ইন-মেমরি ক্যাশিং। এটি নিশ্চিত করতে সাহায্য করে যে, পেজড ডেটা নিয়ে কাজ করার সময় আপনার অ্যাপ যেন সিস্টেম রিসোর্স দক্ষতার সাথে ব্যবহার করে।
  • অন্তর্নির্মিত রিকোয়েস্ট ডিডুপ্লিকেশন, যা আপনার অ্যাপকে নেটওয়ার্ক ব্যান্ডউইথ এবং সিস্টেম রিসোর্স দক্ষতার সাথে ব্যবহার করতে সাহায্য করে।
  • First-class support for Kotlin coroutines and flows.
  • ত্রুটি ব্যবস্থাপনার জন্য অন্তর্নির্মিত সমর্থন, যার মধ্যে রিফ্রেশ এবং পুনরায় চেষ্টা করার ক্ষমতা অন্তর্ভুক্ত।

সেটআপ

আপনার অ্যান্ড্রয়েড অ্যাপে পেজিং কম্পোনেন্ট ইম্পোর্ট করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত ডিপেন্ডেন্সিগুলো যোগ করুন:

কোটলিন

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 স্তর
  • UI স্তর
একটি চিত্র দেখাচ্ছে যে, রিপোজিটরি লেয়ারের PagingSource বা RemoteMediator কম্পোনেন্ট থেকে ViewModel লেয়ারের Pager কম্পোনেন্টে পেজ করা ডেটা প্রবাহিত হয়।  তারপর Pager কম্পোনেন্টটি UI লেয়ারের লেজি লেআউট কম্পোনেন্টগুলোর কাছে PagingData-এর একটি ফ্লো প্রকাশ করে।
চিত্র ১. আপনার অ্যাপ আর্কিটেকচারে পেজিং লাইব্রেরি কীভাবে কাজ করে তার একটি উদাহরণ।

এই অংশে পেজিং লাইব্রেরির সেই উপাদানগুলো বর্ণনা করা হয়েছে যেগুলো প্রতিটি স্তরে কাজ করে এবং পেজ করা ডেটা লোড ও প্রদর্শন করার জন্য সেগুলো কীভাবে একত্রে কাজ করে।

রিপোজিটরি স্তর

রিপোজিটরি লেয়ারে পেজিং লাইব্রেরির প্রধান উপাদান হলো PagingSource । প্রতিটি PagingSource অবজেক্ট ডেটার উৎস এবং সেই উৎস থেকে ডেটা কীভাবে পুনরুদ্ধার করতে হবে তা নির্ধারণ করে। একটি PagingSource অবজেক্ট নেটওয়ার্ক উৎস এবং স্থানীয় ডেটাবেস সহ যেকোনো একটি উৎস থেকে ডেটা লোড করতে পারে।

পেজিং লাইব্রেরির আরেকটি কম্পোনেন্ট যা আপনি ব্যবহার করতে পারেন তা হলো RemoteMediator । একটি RemoteMediator অবজেক্ট একটি লেয়ার্ড ডেটা সোর্স থেকে পেজিং পরিচালনা করে, যেমন লোকাল ডাটাবেস ক্যাশসহ একটি নেটওয়ার্ক ডেটা সোর্স।

ভিউমডেল স্তর

Pager কম্পোনেন্টটি একটি PagingSource অবজেক্ট এবং একটি PagingConfig কনফিগারেশন অবজেক্টের উপর ভিত্তি করে PagingData এর ইনস্ট্যান্স তৈরি করার জন্য একটি পাবলিক API প্রদান করে, যা রিঅ্যাক্টিভ স্ট্রিমে প্রকাশিত হয়।

যে কম্পোনেন্টটি ViewModel লেয়ারকে UI-এর সাথে সংযুক্ত করে, সেটি হলো PagingData । একটি PagingData অবজেক্ট হলো পেজিনেটেড ডেটার একটি স্ন্যাপশটের ধারক। এটি একটি PagingSource অবজেক্টকে কোয়েরি করে এবং ফলাফলটি সংরক্ষণ করে।

UI স্তর

প্রধান পেজিং UI API হলো collectAsLazyPagingItems() । এটি পেজ করা আইটেমগুলোকে ডেটার একটি তালিকা হিসেবে প্রকাশ করে, যা Compose-এর LazyColumn এবং LazyRow মতো লেজি লেআউট কম্পোনেন্টগুলো সহজেই ব্যবহার করতে পারে।

Add the androidx.paging:paging-compose library to use Compose-compatible APIs that let the UI automatically react to data loads, updates, and errors without the need for adapters or diffing logic. Use the collectAsLazyPagingItems() extension function on a Flow<PagingData> to pass in the returned LazyPagingItems to items() in a LazyColumn .

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

আরও তথ্যের জন্য, বৃহৎ ডেটা-সেট (পেজিং) দেখুন।

{% হুবহু %} {% endverbatim %} {% হুবহু %} {% endverbatim %}