RxWorker 中的執行緒
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
我們提供 WorkManager 和 RxJava 之間的互通性。如要開始使用,請在 Gradle 檔案中加入 work-runtime
以外的 work-rxjava3
依附元件。也有支援 rxjava2 的 work-rxjava2
依附元件。
然而,不是擴充 Worker
,應該擴充 RxWorker
。最後,覆寫 RxWorker.createWork()
方法,以回傳表示執行作業 Result
的 Single<Result>
,如下所示:
Kotlin
class RxDownloadWorker(
context: Context,
params: WorkerParameters
) : RxWorker(context, params) {
override fun createWork(): Single<Result> {
return Observable.range(0, 100)
.flatMap { download("https://www.example.com") }
.toList()
.map { Result.success() }
}
}
Java
public class RxDownloadWorker extends RxWorker {
public RxDownloadWorker(Context context, WorkerParameters params) {
super(context, params);
}
@NonNull
@Override
public Single<Result> createWork() {
return Observable.range(0, 100)
.flatMap { download("https://www.example.com") }
.toList()
.map { Result.success() };
}
}
請注意,於主執行緒「呼叫」 RxWorker.createWork()
,但於根據預設的背景執行緒「訂閱」回傳值。您可以覆寫 RxWorker.getBackgroundScheduler()
來變更訂閱執行緒。
當 RxWorker
為 onStopped()
時,訂閱將會取消,因此您不需要以任何特殊方式處理作業停止。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-07-27 (世界標準時間)。
[null,null,["上次更新時間:2025-07-27 (世界標準時間)。"],[],[],null,["# Threading in RxWorker\n\nWe provide interoperability between WorkManager and RxJava. To get started,\ninclude [`work-rxjava3` dependency in addition to `work-runtime`](/jetpack/androidx/releases/work#declaring_dependencies) in your gradle file.\nThere is also a `work-rxjava2` dependency that supports rxjava2 instead.\n\nThen, instead of extending `Worker`, you should extend`RxWorker`. Finally\noverride the [`RxWorker.createWork()`](/reference/androidx/work/RxWorker#createWork())\nmethod to return a `Single\u003cResult\u003e` indicating the [`Result`](/reference/androidx/work/ListenableWorker.Result) of your execution, as\nfollows: \n\n### Kotlin\n\n```kotlin\nclass RxDownloadWorker(\n context: Context,\n params: WorkerParameters\n) : RxWorker(context, params) {\n override fun createWork(): Single\u003cResult\u003e {\n return Observable.range(0, 100)\n .flatMap { download(\"https://www.example.com\") }\n .toList()\n .map { Result.success() }\n }\n}\n```\n\n### Java\n\n```java\npublic class RxDownloadWorker extends RxWorker {\n\n public RxDownloadWorker(Context context, WorkerParameters params) {\n super(context, params);\n }\n\n @NonNull\n @Override\n public Single\u003cResult\u003e createWork() {\n return Observable.range(0, 100)\n .flatMap { download(\"https://www.example.com\") }\n .toList()\n .map { Result.success() };\n }\n}\n```\n\nNote that `RxWorker.createWork()` is *called* on the main thread, but the return\nvalue is *subscribed* on a background thread by default. You can override [`RxWorker.getBackgroundScheduler()`](/reference/androidx/work/RxWorker#getBackgroundScheduler()) to change the\nsubscribing thread.\n\nWhen an `RxWorker` is `onStopped()`, the subscription will get disposed of, so\nyou don't need to handle [work stoppages](/topic/libraries/architecture/workmanager/how-to/managing-work#cancelling) in any special way."]]