পেজিং লাইব্রেরি ওভারভিউ   Android Jetpack-এর অংশ।

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

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

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

  • আপনার পেজ করা ডেটার জন্য ইন-মেমরি ক্যাশিং। এটি নিশ্চিত করতে সাহায্য করে যে আপনার অ্যাপ পেজ করা ডেটার সাথে কাজ করার সময় সিস্টেম রিসোর্স দক্ষতার সাথে ব্যবহার করে।
  • বিল্ট-ইন অনুরোধ ডিডুপ্লিকেশন, যা আপনার অ্যাপ যাতে নেটওয়ার্ক ব্যান্ডউইথ এবং সিস্টেম রিসোর্স দক্ষতার সাথে ব্যবহার করে তা নিশ্চিত করতে সাহায্য করে।
  • Kotlin coroutines, flows ও 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")
}

গ্ৰুভি

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

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

রিপোজিটরি লেয়ার

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

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

ViewModel লেয়ার

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

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

UI লেয়ার

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

Compose-এর সাথে মানানসই API ব্যবহার করতে androidx.paging:paging-compose লাইব্রেরি যোগ করুন যা UI-কে অ্যাডাপ্টার বা ডিফারেন্সিং লজিক ছাড়াই ডেটা লোড, আপডেট এবং সমস্যার ক্ষেত্রে অটোমেটিক প্রতিক্রিয়া জানাতে দেয়। items()-এ LazyPagingItems ফেরত পাঠাতে Flow<PagingData>-এ collectAsLazyPagingItems() এক্সটেনশন ফাংশন ব্যবহার করুন, 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()
            }
        }
    }
}

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