অ্যান্ড্রয়েড জেটপ্যাকের অ্যান্ড্রয়েড কেটিএক্স অংশ।

অ্যান্ড্রয়েড কেটিএক্স কোটলিন এক্সটেনশনের একটি সেট যা অ্যান্ড্রয়েড জেটপ্যাক এবং অন্যান্য অ্যান্ড্রয়েড লাইব্রেরির সাথে অন্তর্ভুক্ত। কেটিএক্স এক্সটেনশনগুলি জেটপ্যাক, অ্যান্ড্রয়েড প্ল্যাটফর্ম এবং অন্যান্য এপিআইগুলিকে সংক্ষিপ্ত, বাজে কোটলিন প্রদান করে। এটি করার জন্য, এই এক্সটেনশনগুলি নিম্নলিখিতগুলি সহ বিভিন্ন কোটলিন ভাষার বৈশিষ্ট্যগুলিকে ব্যবহার করে:

  • এক্সটেনশন ফাংশন
  • এক্সটেনশন বৈশিষ্ট্য
  • ল্যাম্বদাস
  • নাম দেওয়া পরামিতি
  • প্যারামিটার ডিফল্ট মান
  • করুটিন

উদাহরণ হিসেবে, SharedPreferences সাথে কাজ করার সময়, পছন্দের ডেটাতে পরিবর্তন করার আগে আপনাকে অবশ্যই একজন সম্পাদক তৈরি করতে হবে। আপনি যখন সম্পাদনা শেষ করবেন তখন আপনাকে অবশ্যই সেই পরিবর্তনগুলি প্রয়োগ করতে হবে বা করতে হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

sharedPreferences
        .edit()  // create an Editor
        .putBoolean("key", value)
        .apply() // write to disk asynchronously

কোটলিন ল্যাম্বডাস এই ব্যবহারের ক্ষেত্রে উপযুক্ত। এডিটর তৈরি হওয়ার পরে এক্সিকিউট করার জন্য কোডের একটি ব্লক পাস করে, কোড এক্সিকিউট করতে দিয়ে এবং তারপর SharedPreferences API-কে পারমাণবিকভাবে পরিবর্তনগুলি প্রয়োগ করার অনুমতি দিয়ে তারা আপনাকে আরও সংক্ষিপ্ত পদ্ধতি গ্রহণ করার অনুমতি দেয়।

এখানে Android KTX কোর ফাংশনের একটি উদাহরণ, SharedPreferences.edit , যা SharedPreferences এ একটি সম্পাদনা ফাংশন যোগ করে। এই ফাংশনটি তার প্রথম আর্গুমেন্ট হিসাবে একটি ঐচ্ছিক boolean ফ্ল্যাগ নেয় যা পরিবর্তনগুলি কমিট বা প্রয়োগ করতে ইঙ্গিত করে। এটি একটি ল্যাম্বডা আকারে SharedPreferences এডিটরে সঞ্চালনের জন্য একটি অ্যাকশনও পায়।

// SharedPreferences.edit extension function signature from Android KTX - Core
// inline fun SharedPreferences.edit(
//         commit: Boolean = false,
//         action: SharedPreferences.Editor.() -> Unit)

// Commit a new value asynchronously
sharedPreferences.edit { putBoolean("key", value) }

// Commit a new value synchronously
sharedPreferences.edit(commit = true) { putBoolean("key", value) }

কলকারী পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ বা প্রয়োগ করবেন কিনা তা চয়ন করতে পারেন৷ action ল্যাম্বডা নিজেই SharedPreferences.Editor এ একটি বেনামী এক্সটেনশন ফাংশন যা Unit প্রদান করে, যেমনটি তার স্বাক্ষর দ্বারা নির্দেশিত হয়। এই কারণে ব্লকের ভিতরে, আপনি SharedPreferences.Editor এ সরাসরি কাজ সম্পাদন করতে পারবেন।

অবশেষে, SharedPreferences.edit() স্বাক্ষরে inline কীওয়ার্ড রয়েছে। এই কীওয়ার্ডটি Kotlin কম্পাইলারকে বলে যে এটি প্রতিবার ফাংশনটি ব্যবহার করার সময় ফাংশনের জন্য সংকলিত বাইটকোডটি কপি এবং পেস্ট (বা ইনলাইন ) করা উচিত। এটি প্রতিবার এই ফাংশনটি কল করার সময় প্রতিটি action জন্য একটি নতুন ক্লাস ইনস্ট্যান্ট করার ওভারহেড এড়ায়।

ল্যাম্বডাস ব্যবহার করে কোড পাস করার এই প্যাটার্ন, সংবেদনশীল ডিফল্টগুলি প্রয়োগ করা যা ওভাররাইড করা যেতে পারে, এবং inline এক্সটেনশন ফাংশন ব্যবহার করে বিদ্যমান APIগুলিতে এই আচরণগুলি যোগ করা Android KTX লাইব্রেরি দ্বারা প্রদত্ত বর্ধিতকরণগুলির বৈশিষ্ট্য।

আপনার প্রকল্পে Android KTX ব্যবহার করুন

Android KTX ব্যবহার শুরু করতে, আপনার প্রকল্পের build.gradle ফাইলে নিম্নলিখিত নির্ভরতা যোগ করুন:

গ্রোভি

repositories {
    google()
}

কোটলিন

repositories {
    google()
}

অ্যান্ড্রয়েডএক্স মডিউল

Android KTX মডিউলে সংগঠিত, যেখানে প্রতিটি মডিউল এক বা একাধিক প্যাকেজ ধারণ করে।

আপনার অ্যাপের build.gradle ফাইলে আপনাকে অবশ্যই প্রতিটি মডিউল আর্টিফ্যাক্টের জন্য একটি নির্ভরতা অন্তর্ভুক্ত করতে হবে। আর্টিফ্যাক্টে সংস্করণ নম্বর যোগ করতে ভুলবেন না। আপনি এই বিষয়ে প্রতিটি শিল্পকর্মের সংশ্লিষ্ট বিভাগে সর্বশেষ সংস্করণ নম্বরগুলি খুঁজে পেতে পারেন৷

অ্যান্ড্রয়েড কেটিএক্সে একটি একক মূল মডিউল রয়েছে যা সাধারণ ফ্রেমওয়ার্ক এপিআই এবং বেশ কয়েকটি ডোমেন-নির্দিষ্ট এক্সটেনশনের জন্য কোটলিন এক্সটেনশন সরবরাহ করে।

মূল মডিউল বাদ দিয়ে, সমস্ত KTX মডিউল শিল্পকর্ম আপনার build.gradle ফাইলে অন্তর্নিহিত জাভা নির্ভরতা প্রতিস্থাপন করে। উদাহরণস্বরূপ, আপনি একটি androidx.fragment:fragment নির্ভরতাকে androidx.fragment:fragment-ktx দিয়ে প্রতিস্থাপন করতে পারেন। এই সিনট্যাক্স সংস্করণকে আরও ভালভাবে পরিচালনা করতে সাহায্য করে এবং অতিরিক্ত নির্ভরতা ঘোষণার প্রয়োজনীয়তা যোগ করে না।

কোর কেটিএক্স

কোর কেটিএক্স মডিউল সাধারণ লাইব্রেরির জন্য এক্সটেনশন প্রদান করে যা অ্যান্ড্রয়েড ফ্রেমওয়ার্কের অংশ। এই লাইব্রেরিতে জাভা-ভিত্তিক নির্ভরতা নেই যা আপনাকে build.gradle এ যোগ করতে হবে।

এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "androidx.core:core-ktx:1.13.1"
}

কোটলিন

dependencies {
    implementation("androidx.core:core-ktx:1.13.1")
}

কোর কেটিএক্স মডিউলে থাকা প্যাকেজগুলির একটি তালিকা এখানে রয়েছে:

সংগ্রহ KTX

সংগ্রহের এক্সটেনশনগুলিতে ArrayMap , LongSparseArray , LruCache এবং অন্যান্য সহ Android এর মেমরি-দক্ষ সংগ্রহ লাইব্রেরির সাথে কাজ করার জন্য ইউটিলিটি ফাংশন রয়েছে৷

এই মডিউলটি ব্যবহার করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "androidx.collection:collection-ktx:1.4.5"
}

কোটলিন

dependencies {
    implementation("androidx.collection:collection-ktx:1.4.5")
}

সংগ্রহের এক্সটেনশনগুলি কোটলিনের অপারেটর ওভারলোডিংয়ের সুবিধা নেয় সংগ্রহের সংমিশ্রণের মতো জিনিসগুলিকে সহজ করতে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

// Combine 2 ArraySets into 1.
val combinedArraySet = arraySetOf(1, 2, 3) + arraySetOf(4, 5, 6)

// Combine with numbers to create a new sets.
val newArraySet = combinedArraySet + 7 + 8

খণ্ড KTX

ফ্র্যাগমেন্ট কেটিএক্স মডিউলটি ফ্র্যাগমেন্ট এপিআইকে সহজ করার জন্য অনেকগুলি এক্সটেনশন প্রদান করে।

এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "androidx.fragment:fragment-ktx:1.8.4"
}

কোটলিন

dependencies {
    implementation("androidx.fragment:fragment-ktx:1.8.4")
}

ফ্র্যাগমেন্ট কেটিএক্স মডিউল দিয়ে, আপনি ল্যাম্বডাসের সাথে ফ্র্যাগমেন্ট লেনদেন সহজ করতে পারেন, উদাহরণস্বরূপ:

fragmentManager().commit {
   addToBackStack("...")
   setCustomAnimations(
           R.anim.enter_anim,
           R.anim.exit_anim)
   add(fragment, "...")
}

আপনি viewModels এবং activityViewModels প্রপার্টি ডেলিগেট ব্যবহার করে এক লাইনে একটি ViewModel এর সাথে আবদ্ধ করতে পারেন:

// Get a reference to the ViewModel scoped to this Fragment
val viewModel by viewModels<MyViewModel>()

// Get a reference to the ViewModel scoped to its Activity
val viewModel by activityViewModels<MyViewModel>()

লাইফসাইকেল KTX

লাইফসাইকেল কেটিএক্স প্রতিটি Lifecycle অবজেক্টের জন্য একটি LifecycleScope সংজ্ঞায়িত করে। Lifecycle ধ্বংস হয়ে গেলে এই সুযোগে চালু করা যেকোন কোরুটিন বাতিল হয়ে যায়। আপনি lifecycle.coroutineScope বা lifecycleOwner.lifecycleScope বৈশিষ্ট্য ব্যবহার করে Lifecycle CoroutineScope অ্যাক্সেস করতে পারেন।

এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.8.7"
}

কোটলিন

dependencies {
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.7")
}
,

গ্রোভি

dependencies {
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.8.7"
}

কোটলিন

dependencies {
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.7")
}

নিম্নোক্ত উদাহরণটি দেখায় কিভাবে lifecycleOwner.lifecycleScope ব্যবহার করে অসিঙ্ক্রোনাসভাবে প্রি-কম্পিউটেড টেক্সট তৈরি করতে হয়:

class MyFragment: Fragment() {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewLifecycleOwner.lifecycleScope.launch {
            val params = TextViewCompat.getTextMetricsParams(textView)
            val precomputedText = withContext(Dispatchers.Default) {
                PrecomputedTextCompat.create(longTextContent, params)
            }
            TextViewCompat.setPrecomputedText(textView, precomputedText)
        }
    }
}

লাইভডেটা কেটিএক্স

LiveData ব্যবহার করার সময়, আপনাকে অ্যাসিঙ্ক্রোনাসভাবে মান গণনা করতে হতে পারে। উদাহরণস্বরূপ, আপনি একজন ব্যবহারকারীর পছন্দগুলি পুনরুদ্ধার করতে এবং আপনার UI এ তাদের পরিবেশন করতে চাইতে পারেন৷ এই ক্ষেত্রে, LiveData KTX একটি liveData বিল্ডার ফাংশন প্রদান করে যা একটি suspend ফাংশনকে কল করে এবং ফলাফলটিকে একটি LiveData অবজেক্ট হিসাবে পরিবেশন করে।

এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.7"
}

কোটলিন

dependencies {
    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.8.7")
}
,

গ্রোভি

dependencies {
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.7"
}

কোটলিন

dependencies {
    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.8.7")
}

নিম্নলিখিত উদাহরণে, loadUser() হল একটি সাসপেন্ড ফাংশন যা অন্যত্র ঘোষণা করা হয়েছে। loadUser() অ্যাসিঙ্ক্রোনাস কল করতে আপনি liveData বিল্ডার ফাংশন ব্যবহার করতে পারেন এবং তারপর ফলাফল নির্গত করতে emit() ব্যবহার করতে পারেন:

val user: LiveData<User> = liveData {
    val data = database.loadUser() // loadUser is a suspend function.
    emit(data)
}

LiveData দিয়ে কোরোটিন ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, আর্কিটেকচার উপাদানগুলির সাথে কোটলিন কোরোটিন ব্যবহার করুন দেখুন।

নেভিগেশন লাইব্রেরির প্রতিটি উপাদানের নিজস্ব KTX সংস্করণ রয়েছে যা API-কে আরও সংক্ষিপ্ত এবং কোটলিন-ইডিওম্যাটিক হিসাবে গ্রহণ করে।

এই মডিউলগুলি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিতগুলি যুক্ত করুন:

গ্রোভি

dependencies {
    implementation "androidx.navigation:navigation-runtime-ktx:2.8.2"
    implementation "androidx.navigation:navigation-fragment-ktx:2.8.2"
    implementation "androidx.navigation:navigation-ui-ktx:2.8.2"
}

কোটলিন

dependencies {
    implementation("androidx.navigation:navigation-runtime-ktx:2.8.2")
    implementation("androidx.navigation:navigation-fragment-ktx:2.8.2")
    implementation("androidx.navigation:navigation-ui-ktx:2.8.2")
}

গন্তব্য আর্গুমেন্ট অ্যাক্সেস করতে এবং গন্তব্যে নেভিগেট করতে এক্সটেনশন ফাংশন এবং প্রপার্টি ডেলিগেশন ব্যবহার করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

class MyDestination : Fragment() {

    // Type-safe arguments are accessed from the bundle.
    val args by navArgs<MyDestinationArgs>()

    ...
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        view.findViewById<Button>(R.id.next)
            .setOnClickListener {
                // Fragment extension added to retrieve a NavController from
                // any destination.
                findNavController().navigate(R.id.action_to_next_destination)
            }
     }
     ...

}

প্যালেট কেটিএক্স

প্যালেট কেটিএক্স মডিউল রঙ প্যালেটগুলির সাথে কাজ করার জন্য ইডিওম্যাটিক কোটলিন সমর্থন প্রদান করে।

এই মডিউলটি ব্যবহার করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "androidx.palette:palette-ktx:1.0.0"
}

কোটলিন

dependencies {
    implementation("androidx.palette:palette-ktx:1.0.0")
}

selected হিসেবে, Palette ইন্সট্যান্সের সাথে কাজ করার সময়, আপনি get অপারেটর target [ ] ):

val palette = Palette.from(bitmap).generate()
val swatch = palette[target]

প্রতিক্রিয়াশীল স্ট্রীম KTX

রিঅ্যাকটিভ স্ট্রীমস কেটিএক্স মডিউল আপনাকে ReactiveStreams প্রকাশকের কাছ থেকে একটি পর্যবেক্ষণযোগ্য LiveData স্ট্রিম তৈরি করতে দেয়।

এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.7"
}

কোটলিন

dependencies {
    implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.7")
}
,

গ্রোভি

dependencies {
    implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.7"
}

কোটলিন

dependencies {
    implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.7")
}

উদাহরণ হিসাবে, ব্যবহারকারীদের একটি ছোট তালিকা সহ একটি ডাটাবেস অনুমান করুন। আপনার অ্যাপে, আপনি মেমরিতে ডাটাবেস লোড করেন এবং তারপর আপনার UI-তে ব্যবহারকারীর ডেটা প্রদর্শন করেন। এটি অর্জন করতে, আপনি RxJava ব্যবহার করতে পারেন। Room জেটপ্যাক উপাদানটি একটি Flowable হিসাবে ব্যবহারকারীর তালিকা পুনরুদ্ধার করতে পারে। এই পরিস্থিতিতে, আপনাকে অবশ্যই আপনার খণ্ড বা কার্যকলাপের জীবন জুড়ে Rx প্রকাশক সদস্যতা পরিচালনা করতে হবে।

LiveDataReactiveStreams এর সাথে, তবে, আপনি RxJava এবং এর সমৃদ্ধ অপারেটর এবং কাজের সময়সূচী করার ক্ষমতা থেকে উপকৃত হতে পারেন যখন LiveData এর সরলতার সাথে কাজ করতে পারেন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

val fun getUsersLiveData() : LiveData<List<User>> {
    val users: Flowable<List<User>> = dao.findUsers()
    return LiveDataReactiveStreams.fromPublisher(users)
}

রুম KTX

রুম এক্সটেনশনগুলি ডাটাবেস লেনদেনের জন্য কোরোটিন সমর্থন যোগ করে।

এই মডিউলটি ব্যবহার করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "androidx.room:room-ktx:2.6.1"
}

কোটলিন

dependencies {
    implementation("androidx.room:room-ktx:2.6.1")
}

এখানে কয়েকটি উদাহরণ রয়েছে যেখানে রুম এখন কোরোটিন ব্যবহার করে। প্রথম উদাহরণটি User অবজেক্টের একটি তালিকা ফেরত দিতে একটি suspend ফাংশন ব্যবহার করে, যখন দ্বিতীয়টি অসিঙ্ক্রোনাসভাবে User তালিকা ফেরত দিতে Kotlin's Flow ব্যবহার করে। মনে রাখবেন যে Flow ব্যবহার করার সময়, আপনি যে সারণীগুলি অনুসন্ধান করছেন সেগুলির কোনও পরিবর্তন সম্পর্কেও আপনাকে অবহিত করা হবে৷

@Query("SELECT * FROM Users")
suspend fun getUsers(): List<User>

@Query("SELECT * FROM Users")
fun getUsers(): Flow<List<User>>

SQLite KTX

SQLite এক্সটেনশনগুলি লেনদেনে SQL-সম্পর্কিত কোড মোড়ানো, প্রচুর বয়লারপ্লেট কোড বাদ দেয়।

এই মডিউলটি ব্যবহার করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "androidx.sqlite:sqlite-ktx:2.4.0"
}

কোটলিন

dependencies {
    implementation("androidx.sqlite:sqlite-ktx:2.4.0")
}

এখানে একটি ডাটাবেস লেনদেন সম্পাদন করতে transaction এক্সটেনশন ব্যবহার করার একটি উদাহরণ:

db.transaction {
    // insert data
}

ভিউ মডেল কেটিএক্স

ViewModel KTX লাইব্রেরি একটি viewModelScope() ফাংশন প্রদান করে যা আপনার ViewModel থেকে coroutines চালু করা সহজ করে তোলে। CoroutineScope Dispatchers.Main এর সাথে আবদ্ধ এবং ViewModel সাফ হয়ে গেলে স্বয়ংক্রিয়ভাবে বাতিল হয়ে যায়। আপনি প্রতিটি ViewModel এর জন্য একটি নতুন সুযোগ তৈরি করার পরিবর্তে viewModelScope() ব্যবহার করতে পারেন।

এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7"
}

কোটলিন

dependencies {
    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7")
}
,

গ্রোভি

dependencies {
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7"
}

কোটলিন

dependencies {
    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7")
}

একটি উদাহরণ হিসাবে, নিম্নলিখিত viewModelScope() ফাংশন একটি coroutine চালু করে যা একটি পটভূমি থ্রেডে একটি নেটওয়ার্ক অনুরোধ করে। লাইব্রেরি সমস্ত সেটআপ এবং সংশ্লিষ্ট স্কোপ ক্লিয়ারিং পরিচালনা করে:

class MainViewModel : ViewModel() {
    // Make a network request without blocking the UI thread
    private fun makeNetworkRequest() {
        // launch a coroutine in viewModelScope
        viewModelScope.launch  {
            remoteApi.slowFetch()
            ...
        }
    }

    // No need to override onCleared()
}

ওয়ার্ক ম্যানেজার কেটিএক্স

WorkManager KTX কোরোটিনের জন্য প্রথম-শ্রেণীর সহায়তা প্রদান করে।

এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "androidx.work:work-runtime-ktx:2.9.1"
}

কোটলিন

dependencies {
    implementation("androidx.work:work-runtime-ktx:2.9.1")
}

Worker প্রসারিত করার পরিবর্তে, আপনি এখন CoroutineWorker প্রসারিত করতে পারেন, যার একটি সামান্য ভিন্ন API রয়েছে। উদাহরণস্বরূপ, আপনি যদি কিছু নেটওয়ার্ক ক্রিয়াকলাপ সম্পাদন করার জন্য একটি সাধারণ CoroutineWorker তৈরি করতে চান তবে আপনি নিম্নলিখিতগুলি করতে পারেন:

class CoroutineDownloadWorker(context: Context, params: WorkerParameters)
        : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result = coroutineScope {
        val jobs = (0 until 100).map {
            async {
                downloadSynchronously("https://www.google.com")
            }
        }

        // awaitAll will throw an exception if a download fails, which
        // CoroutineWorker will treat as a failure
        jobs.awaitAll()
        Result.success()
    }
}

CoroutineWorker ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, CoroutineWorker-এ থ্রেডিং দেখুন।

WorkManager KTX বর্তমান কোরোটিন স্থগিত করার জন্য Operations এবং ListenableFutures এ এক্সটেনশন ফাংশন যোগ করে।

এখানে একটি উদাহরণ যা Operation স্থগিত করে যা enqueue() দ্বারা ফিরে আসে:

// Inside of a coroutine...

// Run async operation and suspend until completed.
WorkManager.getInstance()
        .beginWith(longWorkRequest)
        .enqueue().await()

// Resume after work completes...

অন্যান্য KTX মডিউল

আপনি অতিরিক্ত KTX মডিউলগুলিও অন্তর্ভুক্ত করতে পারেন যা AndroidX এর বাইরে বিদ্যমান।

ফায়ারবেস কেটিএক্স

অ্যান্ড্রয়েডের জন্য কিছু Firebase SDK-এ Kotlin এক্সটেনশন লাইব্রেরি রয়েছে যা আপনাকে আপনার অ্যাপে Firebase ব্যবহার করার সময় বাহানামূলক Kotlin কোড লিখতে সক্ষম করে। আরও তথ্যের জন্য, নিম্নলিখিত বিষয়গুলি দেখুন:

Google মানচিত্র প্ল্যাটফর্ম KTX

Google Maps প্ল্যাটফর্ম অ্যান্ড্রয়েড SDK-এর জন্য KTX এক্সটেনশনগুলি উপলব্ধ রয়েছে যা আপনাকে এক্সটেনশন ফাংশন, নামযুক্ত প্যারামিটার এবং ডিফল্ট আর্গুমেন্ট, ধ্বংস ঘোষণা এবং কোরোটিনের মতো কয়েকটি কোটলিন ভাষার বৈশিষ্ট্যগুলির সুবিধা নিতে দেয়৷ আরও তথ্যের জন্য, নিম্নলিখিত বিষয়গুলি দেখুন:

কোর কেটিএক্স খেলুন

প্লে কোর কেটিএক্স প্লে কোর লাইব্রেরিতে SplitInstallManager এবং AppUpdateManager এ এক্সটেনশন ফাংশন যোগ করে এক-শট অনুরোধের জন্য Kotlin coroutines এবং স্থিতি আপডেট পর্যবেক্ষণের জন্য ফ্লোকে সমর্থন যোগ করে।

এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "com.google.android.play:core-ktx:1.8.1"
}

কোটলিন

dependencies {
    implementation("com.google.android.play:core-ktx:1.8.1")
}

এখানে একটি স্ট্যাটাস-মনিটরিং Flow এর একটি উদাহরণ:

// Inside of a coroutine...

// Request in-app update status updates.
manager.requestUpdateFlow().collect { updateResult ->
    when (updateResult) {
        is AppUpdateResult.Available -> TODO()
        is AppUpdateResult.InProgress -> TODO()
        is AppUpdateResult.Downloaded -> TODO()
        AppUpdateResult.NotAvailable -> TODO()
    }
}

আরও তথ্য

Android KTX সম্পর্কে আরও জানতে, DevBytes ভিডিওটি দেখুন।

একটি সমস্যা প্রতিবেদন করতে বা একটি বৈশিষ্ট্য প্রস্তাব করতে, Android KTX সমস্যা ট্র্যাকার ব্যবহার করুন৷