Приложение создает несколько экземпляров периодического работника - PullRequest
0 голосов
/ 14 июня 2019

Приложение, которое я создаю, должно иметь какой-то фоновый процесс для загрузки изображений, и я пытаюсь сделать это с androidx.work.Worker и androidx.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 выполнение его метода doWork каждые 15 минут или, возможно, создание нового экземпляра каждые 15 минут и выполнение doWork при его создании, но это не то, что в конечном итоге происходит.Как проверено установкой точек останова в конструкторе работника и первой строке doWork, я получаю несколько (4, по последнему счету) экземпляров, работающих одновременно.Рабочие не терпят неудачу - все они получают return Result.success(); каждый раз.

Почему я получаю несколько экземпляров своего работника и как мне вернуться к одному экземпляру за раз?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...