WorkManager 中的 Worker 和 ListenableWorker 有什么区别?

app*_*krb 5 java android android-workmanager

我通过这个链接从 Firebase JobDispatcher 迁移到 WorkManager

我发现有WorkerListenableWorker,在哪里使用它们?使用其中任何一个有什么好处吗?

工人:

import android.content.Context;
import androidx.work.Data;
import androidx.work.ListenableWorker.Result;
import androidx.work.Worker;
import androidx.work.WorkerParameters;

class MyWorker extends Worker {

  public MyWorker(@NonNull Context appContext, @NonNull WorkerParameters params) {
    super(appContext, params);
  }

  @Override
  public ListenableWorker.Result doWork() {
    // Do your work here.
    Data input = getInputData();

    // Return a ListenableWorker.Result
    Data outputData = new Data.Builder()
        .putString(“Key”, “value”)
        .build();
    return Result.success(outputData);
  }

  @Override
  public void onStopped() {
    // Cleanup because you are being stopped.
  }
}
Run Code Online (Sandbox Code Playgroud)

可听工人:

import android.content.Context;
import androidx.work.ListenableWorker;
import androidx.work.ListenableWorker.Result;
import androidx.work.WorkerParameters;
import com.google.common.util.concurrent.ListenableFuture;

class MyWorker extends ListenableWorker {

  public MyWorker(@NonNull Context appContext, @NonNull WorkerParameters params) {
    super(appContext, params);
  }

  @Override
  public ListenableFuture<ListenableWorker.Result> startWork() {
    // Do your work here.
    Data input = getInputData();

    // Return a ListenableFuture<>
  }

  @Override
  public void onStopped() {
    // Cleanup because you are being stopped.
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 3

Worker在后台线程上同步运行。 ListenableWorker预计将异步运行 - 它们在主线程上调用,并且您应该提供所有线程(例如将它们移动到后台线程)。 Worker更简单,并且有望成为应用程序的基本构建块。您可以在这里阅读有关它们的更多信息:

https://developer.android.com/reference/androidx/work/Worker https://developer.android.com/reference/androidx/work/ListenableWorker

如果您有兴趣,还可以查看CoroutineWorkerRxWorker