应用程序创建多个定期工作人员实例

时间:2019-06-14 12:24:53

标签: android background-process

我正在创建的应用程序必须具有某种上载图像的后台过程,而我正在尝试使用androidx.work.Workerandroidx.work.WorkManager进行此操作。我正在从应用程序的onCreate运行以下代码:

@Override
public void onCreate() {
    super.onCreate();

    (...)

    initiateUploadJob();
}

private void initiateUploadJob() {
    Constraints constraints = new Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build();

    PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(
            UploadWorker.class, 15, TimeUnit.MINUTES)
            .setConstraints(constraints)
            .build();

    WorkManager.getInstance(this).enqueueUniquePeriodicWork(UploadWorker.class.getName(),
            ExistingPeriodicWorkPolicy.KEEP, workRequest);
}

这是工人阶级:

public class UploadWorker extends Worker {

    @Inject
    ImageUploader imageUploader;

    @Inject
    AuthenticationManager authenticationManager;

    public UploadWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
        getDaggerComponent(context).inject(this);
    }

    @NonNull
    @Override
    public Result doWork() {
        if (NetworkChecker.isNetworkAvailable(getApplicationContext())) {
            imageUploader.uploadImages(
                authenticationManager.getCurrentUser(),
                getApplicationContext());
            return Result.success();
        }
        return Result.failure();
    }
}

我希望这会导致UploadWorker的一个实例每15分钟执行一次doWork方法,或者可能每15分钟创建一个新实例,并在执行时执行doWork被创建,但这不是最终发生的事情。正如通过在worker的构造函数和doWork的第一行中设置断点所验证的那样,我得到了多个(最多4个)实例同时运行。工人不会失败-他们所有人每次都能到达return Result.success();

为什么我要获得多个工人实例,以及如何一次回到一个实例?

0 个答案:

没有答案