Como criar threads no RxWorker
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Fornecemos interoperabilidade entre o WorkManager e o RxJava. Para começar,
inclua a dependência work-rxjava3
, além de work-runtime
no arquivo Gradle.
Também há uma dependência work-rxjava2
compatível com rxjava2.
Depois, em vez de estender o Worker
, estenda o RxWorker
. Por fim,
substitua o método RxWorker.createWork()
para retornar um Single<Result>
indicando o Result
da sua execução, da seguinte
maneira:
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() };
}
}
Observe que RxWorker.createWork()
é chamado na linha de execução principal, mas o valor
de retorno é inscrito em uma linha de execução em segundo plano por padrão. Você pode substituir RxWorker.getBackgroundScheduler()
para mudar a
linha de execução de inscrição.
Quando um RxWorker
é onStopped()
, a inscrição é descartada. Portanto,
você não precisa lidar com interrupções de trabalho de nenhuma forma especial.
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-27 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-07-27 UTC."],[],[],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."]]