CoroutineWorker মধ্যে থ্রেডিং
সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন
আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।
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>
এই পৃষ্ঠার কন্টেন্ট ও কোডের নমুনাগুলি Content License-এ বর্ণিত লাইসেন্সের অধীনস্থ। Java এবং OpenJDK হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2025-07-29 UTC-তে শেষবার আপডেট করা হয়েছে।
[[["সহজে বোঝা যায়","easyToUnderstand","thumb-up"],["আমার সমস্যার সমাধান হয়েছে","solvedMyProblem","thumb-up"],["অন্যান্য","otherUp","thumb-up"]],[["এতে আমার প্রয়োজনীয় তথ্য নেই","missingTheInformationINeed","thumb-down"],["খুব জটিল / অনেক ধাপ","tooComplicatedTooManySteps","thumb-down"],["পুরনো","outOfDate","thumb-down"],["অনুবাদ সংক্রান্ত সমস্যা","translationIssue","thumb-down"],["নমুনা / কোড সংক্রান্ত সমস্যা","samplesCodeIssue","thumb-down"],["অন্যান্য","otherDown","thumb-down"]],["2025-07-29 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[],null,["# Threading in CoroutineWorker\n\nFor Kotlin users, WorkManager provides first-class support for [coroutines](https://kotlinlang.org/docs/reference/coroutines-overview.html). To get\nstarted, include [`work-runtime-ktx` in your gradle file](/jetpack/androidx/releases/work#declaring_dependencies). Instead of extending [`Worker`](/reference/androidx/work/Worker), you should extend [`CoroutineWorker`](/reference/kotlin/androidx/work/CoroutineWorker), which has a suspending\nversion of `doWork()`. For example, if you wanted to build a simple `CoroutineWorker`\nto perform some network operations, you would do the following: \n\n class CoroutineDownloadWorker(\n context: Context,\n params: WorkerParameters\n ) : CoroutineWorker(context, params) {\n\n override suspend fun doWork(): Result {\n val data = downloadSynchronously(\"https://www.google.com\")\n saveData(data)\n return Result.success()\n }\n }\n\nNote that [`CoroutineWorker.doWork()`](/reference/kotlin/androidx/work/CoroutineWorker#doWork()) is a *suspending*\nfunction. Unlike `Worker`, this code does *not* run on the `Executor` specified\nin your [`Configuration`](/reference/androidx/work/Configuration). Instead, it\ndefaults to `Dispatchers.Default`. You can customize this by providing your own `CoroutineContext`. In the above example, you would probably want to do this work on `Dispatchers.IO`, as follows: \n\n class CoroutineDownloadWorker(\n context: Context,\n params: WorkerParameters\n ) : CoroutineWorker(context, params) {\n\n override suspend fun doWork(): Result {\n withContext(Dispatchers.IO) {\n val data = downloadSynchronously(\"https://www.google.com\")\n saveData(data)\n return Result.success()\n }\n }\n }\n\n`CoroutineWorker` handles stoppages automatically by cancelling the coroutine\nand propagating the cancellation signals. You don't need to do anything special\nto handle [work stoppages](/topic/libraries/architecture/workmanager/how-to/managing-work#cancelling).\n\nRunning a CoroutineWorker in a different process\n------------------------------------------------\n\nYou can also bind a worker to a specific process by using\n[`RemoteCoroutineWorker`](/reference/kotlin/androidx/work/multiprocess/RemoteCoroutineWorker),\nan implementation of `ListenableWorker`.\n\n`RemoteCoroutineWorker` binds to a specific process with two extra arguments\nthat you provide as part of the input data when building the work request:\n`ARGUMENT_CLASS_NAME` and `ARGUMENT_PACKAGE_NAME`.\n\nThe following example demonstrates building a work request that is bound to a\nspecific process: \n\n### Kotlin\n\n```kotlin\nval PACKAGE_NAME = \"com.example.background.multiprocess\"\n\nval serviceName = RemoteWorkerService::class.java.name\nval componentName = ComponentName(PACKAGE_NAME, serviceName)\n\nval data: Data = Data.Builder()\n .putString(ARGUMENT_PACKAGE_NAME, componentName.packageName)\n .putString(ARGUMENT_CLASS_NAME, componentName.className)\n .build()\n\nreturn OneTimeWorkRequest.Builder(ExampleRemoteCoroutineWorker::class.java)\n .setInputData(data)\n .build()\n```\n\n### Java\n\n```java\nString PACKAGE_NAME = \"com.example.background.multiprocess\";\n\nString serviceName = RemoteWorkerService.class.getName();\nComponentName componentName = new ComponentName(PACKAGE_NAME, serviceName);\n\nData data = new Data.Builder()\n .putString(ARGUMENT_PACKAGE_NAME, componentName.getPackageName())\n .putString(ARGUMENT_CLASS_NAME, componentName.getClassName())\n .build();\n\nreturn new OneTimeWorkRequest.Builder(ExampleRemoteCoroutineWorker.class)\n .setInputData(data)\n .build();\n```\n\nFor each `RemoteWorkerService`, you also need to add a service definition in\nyour `AndroidManifest.xml` file: \n\n```xml\n\u003cmanifest ... \u003e\n \u003cservice\n android:name=\"androidx.work.multiprocess.RemoteWorkerService\"\n android:exported=\"false\"\n android:process=\":worker1\" /\u003e\n\n \u003cservice\n android:name=\".RemoteWorkerService2\"\n android:exported=\"false\"\n android:process=\":worker2\" /\u003e\n ...\n\u003c/manifest\u003e\n```"]]