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

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

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

উদাহরণ হিসেবে, 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.4"
}

কোটলিন

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

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

// 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.6"
}

কোটলিন

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

গ্রোভি

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

কোটলিন

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

নিম্নোক্ত উদাহরণটি দেখায় কিভাবে 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.6"
}

কোটলিন

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

গ্রোভি

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

কোটলিন

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

নিম্নলিখিত উদাহরণে, 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")
}

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

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

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

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

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

গ্রোভি

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

কোটলিন

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

গ্রোভি

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

কোটলিন

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

উদাহরণ হিসাবে, ব্যবহারকারীদের একটি ছোট তালিকা সহ একটি ডাটাবেস অনুমান করুন। আপনার অ্যাপে, আপনি মেমরিতে ডাটাবেস লোড করেন এবং তারপর আপনার 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.6"
}

কোটলিন

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

গ্রোভি

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

কোটলিন

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

একটি উদাহরণ হিসাবে, নিম্নলিখিত 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 সমস্যা ট্র্যাকার ব্যবহার করুন৷

,

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

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

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

উদাহরণ হিসেবে, 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.4"
}

কোটলিন

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

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

// 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.6"
}

কোটলিন

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

গ্রোভি

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

কোটলিন

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

নিম্নোক্ত উদাহরণটি দেখায় কিভাবে 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.6"
}

কোটলিন

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

গ্রোভি

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

কোটলিন

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

নিম্নলিখিত উদাহরণে, 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")
}

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

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

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

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

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

গ্রোভি

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

কোটলিন

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

গ্রোভি

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

কোটলিন

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

উদাহরণ হিসাবে, ব্যবহারকারীদের একটি ছোট তালিকা সহ একটি ডাটাবেস অনুমান করুন। আপনার অ্যাপে, আপনি মেমরিতে ডাটাবেস লোড করেন এবং তারপর আপনার 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.6"
}

কোটলিন

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

গ্রোভি

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

কোটলিন

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

একটি উদাহরণ হিসাবে, নিম্নলিখিত 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 সমস্যা ট্র্যাকার ব্যবহার করুন৷

,

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

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

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

উদাহরণ হিসেবে, 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.4"
}

কোটলিন

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

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

// 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.6"
}

কোটলিন

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

গ্রোভি

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

কোটলিন

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

নিম্নোক্ত উদাহরণটি দেখায় কিভাবে 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.6"
}

কোটলিন

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

গ্রোভি

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

কোটলিন

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

নিম্নলিখিত উদাহরণে, 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")
}

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

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

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

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

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

গ্রোভি

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

কোটলিন

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

গ্রোভি

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

কোটলিন

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

উদাহরণ হিসাবে, ব্যবহারকারীদের একটি ছোট তালিকা সহ একটি ডাটাবেস অনুমান করুন। আপনার অ্যাপে, আপনি মেমরিতে ডাটাবেস লোড করেন এবং তারপর আপনার 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.6"
}

কোটলিন

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

গ্রোভি

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

কোটলিন

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

একটি উদাহরণ হিসাবে, নিম্নলিখিত 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 সমস্যা ট্র্যাকার ব্যবহার করুন৷

,

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

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

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

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

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

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

এখানে Android KTX কোর ফাংশনের একটি উদাহরণ, SharedPreferences.edit , যা SharedPreferences এ একটি সম্পাদনা ফাংশন যোগ করে। এই ফাংশনটি তার প্রথম যুক্তি হিসাবে একটি al চ্ছিক 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 একটি বেনামে এক্সটেনশন ফাংশন eed এডিটর যা Unit স্বাক্ষর দ্বারা নির্দেশিত হিসাবে ফিরে আসে। এই কারণেই ব্লকের অভ্যন্তরে আপনি সরাসরি SharedPreferences.Editor কাজটি সম্পাদন করতে সক্ষম হন।

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

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

আপনার প্রকল্পে অ্যান্ড্রয়েড কেটিএক্স ব্যবহার করুন

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

গ্রোভি

repositories {
    google()
}

কোটলিন

repositories {
    google()
}

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

অ্যান্ড্রয়েড কেটিএক্স মডিউলগুলিতে সংগঠিত হয়, যেখানে প্রতিটি মডিউলে এক বা একাধিক প্যাকেজ থাকে।

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

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

মূল মডিউল ব্যতীত, সমস্ত কেটিএক্স মডিউল শিল্পকর্মগুলি আপনার 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")
}

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

সংগ্রহ কেটিএক্স

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

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

গ্রোভি

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

কোটলিন

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

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

// 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

খণ্ড কেটিএক্স

খণ্ডটি কেটিএক্স মডিউলটি খণ্ড API সহজ করার জন্য বেশ কয়েকটি এক্সটেনশন সরবরাহ করে।

এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের 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>()

লাইফসাইকেল কেটিএক্স

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

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

গ্রোভি

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

কোটলিন

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

গ্রোভি

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

কোটলিন

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

নিম্নলিখিত উদাহরণটি প্রদর্শন করে যে কীভাবে lifecycleOwner.lifecycleScope ব্যবহার করবেন L

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 বিল্ডার ফাংশন সরবরাহ করে যা একটি suspend ফাংশনকে কল করে এবং ফলাফলকে LiveData অবজেক্ট হিসাবে পরিবেশন করে।

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

গ্রোভি

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

কোটলিন

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

গ্রোভি

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

কোটলিন

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

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

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

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

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

এই মডিউলগুলি অন্তর্ভুক্ত করতে, আপনার অ্যাপের 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")
}

উদাহরণ হিসাবে, Palette উদাহরণ দিয়ে কাজ করার সময়, আপনি জিইটি অপারেটর ( [ ] ) ব্যবহার করে প্রদত্ত target জন্য selected স্যাচটি পুনরুদ্ধার করতে পারেন:

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

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

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

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

গ্রোভি

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

কোটলিন

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

গ্রোভি

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

কোটলিন

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

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

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

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

রুম কেটিএক্স

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

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

গ্রোভি

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

কোটলিন

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

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

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

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

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

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

এই মডিউলটি ব্যবহার করতে, আপনার অ্যাপের 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
}

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

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

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

গ্রোভি

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

কোটলিন

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

গ্রোভি

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

কোটলিন

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

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

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

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

ওয়ার্কম্যানেজার কেটিএক্স করুটাইনদের জন্য প্রথম শ্রেণির সহায়তা সরবরাহ করে।

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

গ্রোভি

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

কোটলিন

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

Worker প্রসারিত করার পরিবর্তে, আপনি এখন CoroutineWorker প্রসারিত করতে পারেন, যার কিছুটা আলাদা এপিআই রয়েছে। উদাহরণস্বরূপ, আপনি যদি কিছু নেটওয়ার্ক অপারেশন সম্পাদন করতে একটি সাধারণ 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 ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, করুটাইন ওয়ার্কারে থ্রেডিং দেখুন।

ওয়ার্কম্যানেজার কেটিএক্স বর্তমান করুটাইন স্থগিত করার জন্য Operations এবং ListenableFutures এক্সটেনশন ফাংশন যুক্ত করে।

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

// Inside of a coroutine...

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

// Resume after work completes...

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

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

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

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

গুগল ম্যাপস প্ল্যাটফর্ম কেটিএক্স

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

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

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

এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের 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()
    }
}

আরও তথ্য

অ্যান্ড্রয়েড কেটিএক্স সম্পর্কে আরও জানতে, ডেভবিটস ভিডিওটি দেখুন।

কোনও সমস্যার প্রতিবেদন করতে বা কোনও বৈশিষ্ট্যের পরামর্শ দিতে, অ্যান্ড্রয়েড কেটিএক্স ইস্যু ট্র্যাকার ব্যবহার করুন।