অ্যান্ড্রয়েড কেটিএক্স, অ্যান্ড্রয়েড জেটপ্যাকের একটি অংশ।
অ্যান্ড্রয়েড KTX হলো কোটলিন এক্সটেনশনের একটি সেট যা অ্যান্ড্রয়েড জেটপ্যাক এবং অন্যান্য অ্যান্ড্রয়েড লাইব্রেরির সাথে অন্তর্ভুক্ত থাকে। KTX এক্সটেনশনগুলো জেটপ্যাক, অ্যান্ড্রয়েড প্ল্যাটফর্ম এবং অন্যান্য এপিআই-এর জন্য সংক্ষিপ্ত ও প্রচলিত কোটলিন কোড সরবরাহ করে। এটি করার জন্য, এই এক্সটেনশনগুলো কোটলিন ভাষার বিভিন্ন বৈশিষ্ট্য ব্যবহার করে, যার মধ্যে নিম্নলিখিতগুলো অন্তর্ভুক্ত:
- এক্সটেনশন ফাংশন
- এক্সটেনশন বৈশিষ্ট্য
- ল্যাম্বডা
- নামযুক্ত প্যারামিটার
- প্যারামিটার ডিফল্ট মান
- কোরাউটিন
উদাহরণস্বরূপ, SharedPreferences নিয়ে কাজ করার সময়, প্রেফারেন্স ডেটাতে কোনো পরিবর্তন করার আগে আপনাকে অবশ্যই একটি এডিটর তৈরি করতে হবে। সম্পাদনা শেষ হলে আপনাকে অবশ্যই সেই পরিবর্তনগুলি অ্যাপ্লাই বা কমিট করতে হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
sharedPreferences
.edit() // create an Editor
.putBoolean("key", value)
.apply() // write to disk asynchronously
এই ধরনের ব্যবহারের জন্য কোটলিন ল্যাম্বডা একদম উপযুক্ত। এডিটর তৈরি হওয়ার পর কার্যকর করার জন্য একটি কোড ব্লক পাস করে, কোডটিকে চলতে দিয়ে এবং তারপর SharedPreferences API-কে অ্যাটমিকভাবে পরিবর্তনগুলো প্রয়োগ করতে দিয়ে, এগুলোর মাধ্যমে আপনি আরও সংক্ষিপ্ত একটি পদ্ধতি অবলম্বন করতে পারেন।
এখানে অ্যান্ড্রয়েড 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 কীওয়ার্ডটি থাকে। এই কীওয়ার্ডটি কোটলিন কম্পাইলারকে বলে দেয় যে, প্রতিবার ফাংশনটি ব্যবহার করার সময় যেন এটি ফাংশনটির কম্পাইল করা বাইটকোড কপি ও পেস্ট (বা ইনলাইন ) করে। এর ফলে, প্রতিবার এই ফাংশনটি কল করার সময় প্রতিটি action জন্য একটি নতুন ক্লাস ইনস্ট্যানশিয়েট করার অতিরিক্ত কাজ এড়ানো যায়।
ল্যাম্বডা ব্যবহার করে কোড পাস করা, ওভাররাইড করা যায় এমন যুক্তিসঙ্গত ডিফল্ট মান প্রয়োগ করা এবং inline এক্সটেনশন ফাংশন ব্যবহার করে বিদ্যমান এপিআই-তে এই আচরণগুলো যুক্ত করার এই ধরণটি অ্যান্ড্রয়েড KTX লাইব্রেরি দ্বারা প্রদত্ত উন্নত বৈশিষ্ট্যগুলোর একটি সাধারণ উদাহরণ।
আপনার প্রকল্পে Android KTX ব্যবহার করুন
Android KTX ব্যবহার শুরু করতে, আপনার প্রোজেক্টের build.gradle ফাইলে নিম্নলিখিত ডিপেন্ডেন্সিটি যোগ করুন:
গ্রুভি
repositories { google() }
কোটলিন
repositories { google() }
অ্যান্ড্রয়েডএক্স মডিউল
অ্যান্ড্রয়েড KTX মডিউলে বিভক্ত, যেখানে প্রতিটি মডিউলে এক বা একাধিক প্যাকেজ থাকে।
আপনার অ্যাপের build.gradle ফাইলে প্রতিটি মডিউল আর্টিফ্যাক্টের জন্য একটি ডিপেন্ডেন্সি অবশ্যই অন্তর্ভুক্ত করতে হবে। আর্টিফ্যাক্টের শেষে ভার্সন নম্বরটি যোগ করতে মনে রাখবেন। এই টপিকের প্রতিটি আর্টিফ্যাক্টের সংশ্লিষ্ট বিভাগে আপনি সর্বশেষ ভার্সন নম্বরগুলো খুঁজে পাবেন।
অ্যান্ড্রয়েড KTX-এ একটিমাত্র কোর মডিউল রয়েছে, যা সাধারণ ফ্রেমওয়ার্ক এপিআই-এর জন্য কোটলিন এক্সটেনশন এবং বেশ কিছু ডোমেইন-নির্দিষ্ট এক্সটেনশন প্রদান করে।
কোর মডিউল ব্যতীত, KTX মডিউলের সমস্ত আর্টিফ্যাক্ট আপনার build.gradle ফাইলে থাকা অন্তর্নিহিত জাভা ডিপেন্ডেন্সি প্রতিস্থাপন করে। উদাহরণস্বরূপ, আপনি androidx.fragment:fragment ডিপেন্ডেন্সিটিকে androidx.fragment:fragment-ktx দিয়ে প্রতিস্থাপন করতে পারেন। এই সিনট্যাক্সটি ভার্সনিং আরও ভালোভাবে পরিচালনা করতে সাহায্য করে এবং অতিরিক্ত ডিপেন্ডেন্সি ঘোষণার প্রয়োজনীয়তা তৈরি করে না।
কোর কেটিএক্স
কোর KTX মডিউলটি অ্যান্ড্রয়েড ফ্রেমওয়ার্কের অন্তর্ভুক্ত সাধারণ লাইব্রেরিগুলোর জন্য এক্সটেনশন প্রদান করে। এই লাইব্রেরিগুলোর কোনো জাভা-ভিত্তিক নির্ভরতা নেই যা আপনাকে build.gradle এ যোগ করতে হবে।
এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিতটি যোগ করুন:
খাঁজকাটা
dependencies { implementation "androidx.core:core-ktx:1.18.0" }
কোটলিন
dependencies { implementation("androidx.core:core-ktx:1.18.0") }
কোর কেটিএক্স মডিউলে অন্তর্ভুক্ত প্যাকেজগুলোর তালিকা নিচে দেওয়া হলো:
- androidx.core.animation
- androidx.core.content
- androidx.core.content.res
- androidx.core.database
- androidx.core.database.sqlite
- androidx.core.graphics
- androidx.core.graphics.drawable
- androidx.core.location
- androidx.core.net
- androidx.core.os
- androidx.core.text
- androidx.core.transition
- androidx.core.util
- androidx.core.view
- androidx.core.widget
সংগ্রহ KTX
কালেকশন এক্সটেনশনগুলিতে অ্যান্ড্রয়েডের মেমরি-সাশ্রয়ী কালেকশন লাইব্রেরি, যেমন ArrayMap , LongSparseArray , LruCache এবং অন্যান্যগুলির সাথে কাজ করার জন্য ইউটিলিটি ফাংশন রয়েছে।
এই মডিউলটি ব্যবহার করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিতটি যোগ করুন:
গ্রোভি
dependencies { implementation "androidx.collection:collection-ktx:1.6.0" }
কোটলিন
dependencies { implementation("androidx.collection:collection-ktx:1.6.0") }
কালেকশন এক্সটেনশনগুলো কোটলিনের অপারেটর ওভারলোডিং সুবিধা ব্যবহার করে কালেকশন কনক্যাটেনেশনের মতো বিষয়গুলোকে সহজ করে তোলে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
// 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
Fragment KTX মডিউলটি ফ্র্যাগমেন্ট এপিআই (API)-কে সরল করার জন্য বেশ কিছু এক্সটেনশন প্রদান করে।
এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিতটি যোগ করুন:
গ্রোভি
dependencies { implementation "androidx.fragment:fragment-ktx:1.8.9" }
কোটলিন
dependencies { implementation("androidx.fragment:fragment-ktx:1.8.9") }
Fragment KTX মডিউলের সাহায্যে, আপনি ল্যাম্বডা ব্যবহার করে ফ্র্যাগমেন্ট ট্রানজ্যাকশন সহজ করতে পারেন, উদাহরণস্বরূপ:
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
লাইফসাইকেল KTX প্রতিটি Lifecycle অবজেক্টের জন্য একটি LifecycleScope নির্ধারণ করে। এই স্কোপের মধ্যে চালু করা যেকোনো কো-রুটিন Lifecycle ধ্বংস হয়ে গেলে বাতিল হয়ে যায়। আপনি lifecycle.coroutineScope অথবা lifecycleOwner.lifecycleScope প্রোপার্টিগুলো ব্যবহার করে Lifecycle CoroutineScope অ্যাক্সেস করতে পারেন।
এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিতটি যোগ করুন:
খাঁজকাটা
dependencies { implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.10.0" }
কোটলিন
dependencies { implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.10.0") }
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে অ্যাসিঙ্ক্রোনাসভাবে প্রি-কম্পিউটেড টেক্সট তৈরি করতে 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.10.0" }
কোটলিন
dependencies { implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.10.0") }
নিম্নলিখিত উদাহরণে, loadUser() হলো অন্য কোথাও ঘোষিত একটি `suspend` ফাংশন। আপনি liveData বিল্ডার ফাংশন ব্যবহার করে loadUser() ফাংশনটিকে অ্যাসিঙ্ক্রোনাসভাবে কল করতে পারেন, এবং তারপর emit() ব্যবহার করে ফলাফলটি ইমিট করতে পারেন:
val user: LiveData<User> = liveData {
val data = database.loadUser() // loadUser is a suspend function.
emit(data)
}
LiveData সাথে coroutine ব্যবহার সম্পর্কে আরও তথ্যের জন্য, “Use Kotlin coroutines with Architecture components” দেখুন।
নেভিগেশন KTX
নেভিগেশন লাইব্রেরির প্রতিটি উপাদানের নিজস্ব KTX সংস্করণ রয়েছে, যা API-কে আরও সংক্ষিপ্ত এবং কোটলিন-সম্মত করে তোলে।
এই মডিউলগুলো অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিতটি যোগ করুন:
গ্রুভি
dependencies { implementation "androidx.navigation:navigation-runtime-ktx:2.9.8" implementation "androidx.navigation:navigation-fragment-ktx:2.9.8" implementation "androidx.navigation:navigation-ui-ktx:2.9.8" }
কোটলিন
dependencies { implementation("androidx.navigation:navigation-runtime-ktx:2.9.8") implementation("androidx.navigation:navigation-fragment-ktx:2.9.8") implementation("androidx.navigation:navigation-ui-ktx:2.9.8") }
নিম্নলিখিত উদাহরণে দেখানো অনুযায়ী, এক্সটেনশন ফাংশন এবং প্রপার্টি ডেলিগেশন ব্যবহার করে ডেস্টিনেশন আর্গুমেন্টগুলো অ্যাক্সেস করুন এবং ডেস্টিনেশনে নেভিগেট করুন:
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)
}
}
...
}
প্যালেট KTX
প্যালেট KTX মডিউলটি কালার প্যালেট নিয়ে কাজ করার জন্য কোটলিনের প্রচলিত রীতি অনুযায়ী সাপোর্ট প্রদান করে।
এই মডিউলটি ব্যবহার করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিতটি যোগ করুন:
গ্রোভি
dependencies { implementation "androidx.palette:palette-ktx:1.0.0" }
কোটলিন
dependencies { implementation("androidx.palette:palette-ktx:1.0.0") }
উদাহরণস্বরূপ, একটি Palette ইনস্ট্যান্স নিয়ে কাজ করার সময়, আপনি get অপারেটর ( [ ] ) ব্যবহার করে একটি নির্দিষ্ট target জন্য selected সোয়াচটি পুনরুদ্ধার করতে পারেন:
val palette = Palette.from(bitmap).generate()
val swatch = palette[target]
রিঅ্যাক্টিভ স্ট্রিমস KTX
Reactive Streams KTX মডিউল আপনাকে একটি ReactiveStreams পাবলিশার থেকে একটি অবজার্ভেবল LiveData স্ট্রিম তৈরি করতে দেয়।
এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিতটি যোগ করুন:
খাঁজকাটা
dependencies { implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:2.10.0" }
কোটলিন
dependencies { implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:2.10.0") }
উদাহরণস্বরূপ, একটি ডাটাবেসের কথা ভাবুন যেখানে অল্প সংখ্যক ব্যবহারকারীর একটি তালিকা রয়েছে। আপনার অ্যাপে, আপনি ডাটাবেসটিকে মেমরিতে লোড করেন এবং তারপর আপনার UI-তে ব্যবহারকারীর ডেটা প্রদর্শন করেন। এটি করার জন্য, আপনি RxJava ব্যবহার করতে পারেন। Room Jetpack কম্পোনেন্টটি ব্যবহারকারীর তালিকাটিকে একটি Flowable হিসেবে পুনরুদ্ধার করতে পারে। এই পরিস্থিতিতে, আপনাকে আপনার fragment বা activity-র পুরো সময় জুড়ে 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.8.4" }
কোটলিন
dependencies { implementation("androidx.room:room-ktx:2.8.4") }
এখানে এমন কয়েকটি উদাহরণ দেওয়া হলো যেখানে Room এখন কো-রুটিন ব্যবহার করে। প্রথম উদাহরণটিতে User অবজেক্টের একটি তালিকা রিটার্ন করার জন্য একটি suspend ফাংশন ব্যবহার করা হয়েছে, আর দ্বিতীয়টিতে অ্যাসিঙ্ক্রোনাসভাবে User তালিকাটি রিটার্ন করার জন্য Kotlin-এর 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.6.2" }
কোটলিন
dependencies { implementation("androidx.sqlite:sqlite-ktx:2.6.2") }
ডাটাবেস ট্রানজ্যাকশন সম্পাদন করতে transaction এক্সটেনশন ব্যবহারের একটি উদাহরণ নিচে দেওয়া হলো:
db.transaction {
// insert data
}
ভিউমডেল KTX
ViewModel KTX লাইব্রেরিতে একটি viewModelScope() ফাংশন রয়েছে যা আপনার ViewModel থেকে কো-রুটিন চালু করা সহজ করে তোলে। CoroutineScope টি Dispatchers.Main এর সাথে আবদ্ধ থাকে এবং ViewModel খালি হয়ে গেলে এটি স্বয়ংক্রিয়ভাবে বাতিল হয়ে যায়। প্রতিটি ViewModel এর জন্য একটি নতুন স্কোপ তৈরি করার পরিবর্তে আপনি viewModelScope() ব্যবহার করতে পারেন।
এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিতটি যোগ করুন:
খাঁজকাটা
dependencies { implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0" }
কোটলিন
dependencies { implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0") }
উদাহরণস্বরূপ, নিম্নলিখিত 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()
}
ওয়ার্কম্যানেজার কেটিএক্স
WorkManager KTX কো-রুটিনের জন্য প্রথম শ্রেণীর সমর্থন প্রদান করে।
এই মডিউলটি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিতটি যোগ করুন:
গ্রোভি
dependencies { implementation "androidx.work:work-runtime-ktx:2.11.2" }
কোটলিন
dependencies { implementation("androidx.work:work-runtime-ktx:2.11.2") }
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 এ এক্সটেনশন ফাংশনও যোগ করে।
এখানে একটি উদাহরণ দেওয়া হলো যা enqueue() দ্বারা ফেরত আসা Operation স্থগিত করে:
// Inside of a coroutine...
// Run async operation and suspend until completed.
WorkManager.getInstance()
.beginWith(longWorkRequest)
.enqueue().await()
// Resume after work completes...
অন্যান্য KTX মডিউল
আপনি AndroidX-এর বাইরে থাকা অতিরিক্ত KTX মডিউলগুলোও অন্তর্ভুক্ত করতে পারেন।
ফায়ারবেস কেটিএক্স
অ্যান্ড্রয়েডের জন্য কিছু ফায়ারবেস এসডিকে-তে কোটলিন এক্সটেনশন লাইব্রেরি রয়েছে, যা আপনার অ্যাপে ফায়ারবেস ব্যবহার করার সময় আপনাকে প্রচলিত কোটলিন কোড লিখতে সক্ষম করে। আরও তথ্যের জন্য, নিম্নলিখিত বিষয়গুলো দেখুন:
গুগল ম্যাপস প্ল্যাটফর্ম KTX
গুগল ম্যাপস প্ল্যাটফর্ম অ্যান্ড্রয়েড এসডিকে-এর জন্য কেটিএক্স (KTX) এক্সটেনশন রয়েছে, যা আপনাকে কোটলিন ভাষার বিভিন্ন বৈশিষ্ট্য, যেমন এক্সটেনশন ফাংশন, নেমড প্যারামিটার ও ডিফল্ট আর্গুমেন্ট, ডিস্ট্রাকচারিং ডিক্লারেশন এবং কো-রুটিন ব্যবহার করার সুযোগ দেয়। আরও তথ্যের জন্য, নিম্নলিখিত বিষয়গুলো দেখুন:
প্লে কোর কেটিএক্স
প্লে কোর KTX, প্লে কোর লাইব্রেরির 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()
}
}
আরও তথ্য
Android KTX সম্পর্কে আরও জানতে DevBytes ভিডিওটি দেখুন।
কোনো সমস্যা জানাতে বা কোনো বৈশিষ্ট্যের পরামর্শ দিতে, Android KTX ইস্যু ট্র্যাকার ব্যবহার করুন।