Приложение, которое я создаю, должно иметь какой-то фоновый процесс для загрузки изображений, и я пытаюсь сделать это с 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();
каждый раз.
Почему я получаю несколько экземпляров своего работника и как мне вернуться к одному экземпляру за раз?