Kotlin ব্যবহারকারীদের জন্য, WorkManager কোরোটিনের জন্য প্রথম-শ্রেণীর সমর্থন প্রদান করে। শুরু করতে, আপনার gradle ফাইলে work-runtime-ktx
অন্তর্ভুক্ত করুন। Worker
প্রসারিত করার পরিবর্তে, আপনার CoroutineWorker
প্রসারিত করা উচিত, যার একটি স্থগিত সংস্করণ রয়েছে doWork()
। উদাহরণস্বরূপ, আপনি যদি কিছু নেটওয়ার্ক ক্রিয়াকলাপ সম্পাদন করার জন্য একটি সাধারণ CoroutineWorker
তৈরি করতে চান তবে আপনি নিম্নলিখিতগুলি করবেন:
class CoroutineDownloadWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
val data = downloadSynchronously("https://www.google.com")
saveData(data)
return Result.success()
}
}
মনে রাখবেন CoroutineWorker.doWork()
একটি সাসপেন্ডিং ফাংশন। Worker
বিপরীতে, এই কোডটি আপনার Configuration
উল্লিখিত Executor
চলে না । পরিবর্তে, এটি Dispatchers.Default
ডিফল্ট। আপনি আপনার নিজস্ব CoroutineContext
প্রদান করে এটি কাস্টমাইজ করতে পারেন। উপরের উদাহরণে, আপনি সম্ভবত Dispatchers.IO
তে এই কাজটি করতে চান, নিম্নরূপ:
class CoroutineDownloadWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
withContext(Dispatchers.IO) {
val data = downloadSynchronously("https://www.google.com")
saveData(data)
return Result.success()
}
}
}
CoroutineWorker
coroutine বাতিল করে এবং বাতিলকরণ সংকেত প্রচার করে স্টপেজগুলি স্বয়ংক্রিয়ভাবে পরিচালনা করে। কাজের স্টপেজগুলি পরিচালনা করার জন্য আপনাকে বিশেষ কিছু করতে হবে না।
একটি ভিন্ন প্রক্রিয়ায় একটি CoroutineWorker চালানো
এছাড়াও আপনি ListenableWorker
এর একটি বাস্তবায়ন RemoteCoroutineWorker
ব্যবহার করে একজন কর্মীকে একটি নির্দিষ্ট প্রক্রিয়ার সাথে আবদ্ধ করতে পারেন।
RemoteCoroutineWorker
দুটি অতিরিক্ত আর্গুমেন্ট সহ একটি নির্দিষ্ট প্রক্রিয়ার সাথে আবদ্ধ হয় যা আপনি কাজের অনুরোধ তৈরি করার সময় ইনপুট ডেটার অংশ হিসাবে প্রদান করেন: ARGUMENT_CLASS_NAME
এবং ARGUMENT_PACKAGE_NAME
।
নিম্নলিখিত উদাহরণটি একটি কাজের অনুরোধ তৈরি করে যা একটি নির্দিষ্ট প্রক্রিয়ার সাথে আবদ্ধ:
কোটলিন
val PACKAGE_NAME = "com.example.background.multiprocess" val serviceName = RemoteWorkerService::class.java.name val componentName = ComponentName(PACKAGE_NAME, serviceName) val data: Data = Data.Builder() .putString(ARGUMENT_PACKAGE_NAME, componentName.packageName) .putString(ARGUMENT_CLASS_NAME, componentName.className) .build() return OneTimeWorkRequest.Builder(ExampleRemoteCoroutineWorker::class.java) .setInputData(data) .build()
জাভা
String PACKAGE_NAME = "com.example.background.multiprocess"; String serviceName = RemoteWorkerService.class.getName(); ComponentName componentName = new ComponentName(PACKAGE_NAME, serviceName); Data data = new Data.Builder() .putString(ARGUMENT_PACKAGE_NAME, componentName.getPackageName()) .putString(ARGUMENT_CLASS_NAME, componentName.getClassName()) .build(); return new OneTimeWorkRequest.Builder(ExampleRemoteCoroutineWorker.class) .setInputData(data) .build();
প্রতিটি RemoteWorkerService
এর জন্য, আপনাকে আপনার AndroidManifest.xml
ফাইলে একটি পরিষেবা সংজ্ঞা যোগ করতে হবে:
<manifest ... > <service android:name="androidx.work.multiprocess.RemoteWorkerService" android:exported="false" android:process=":worker1" /> <service android:name=".RemoteWorkerService2" android:exported="false" android:process=":worker2" /> ... </manifest>