Моя задача, которую я хочу запустить, находится в doWork (). Эта часть приложения начинается с вызова scheduleUpdateJob()
. Он, в свою очередь, выполняет doWork()
через рабочий запрос, который выполняет операцию. В конце doWork()
вызывается updateSchedule()
, который устанавливает периодический запрос на выполнение doWork()
каждые 15 минут. Моя проблема в том, что updateSchedule немедленно вызывает doWork, который вызывает свою вызывающую функцию в бесконечном l oop. Я что-то делаю не так?
public class EarthquakeUpdateWorker extends Worker {
private static String PERIODIC_WORK_ID = "PERIODIC_WORK_ID";
public EarthquakeUpdateWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
public static void scheduleUpdateJob(Context context) {
WorkRequest workRequest = new OneTimeWorkRequest.Builder(EarthquakeUpdateWorker.class).setConstraints(Constraints.NONE).build();
WorkManager workManager = WorkManager.getInstance();
workManager.enqueue(workRequest);
}
@NonNull
@Override
public Result doWork() {
// STUFF_TO_DO
updateSchedule(getApplicationContext());
return Result.success();
}
private static void updateSchedule(Context context) {
Constraints constraints = new Constraints.Builder().setRequiredNetworkType(NetworkType.NOT_REQUIRED).build();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
Boolean autoUpdate = sharedPreferences.getBoolean(PreferenceActivity.PREF_AUTO_UPDATE, true);
int updateFreq = Integer.parseInt(sharedPreferences.getString(PreferenceActivity.PREF_UPDATE_FREQ, "60"));
if(autoUpdate) {
PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(EarthquakeUpdateWorker.class, updateFreq, TimeUnit.MINUTES).build();
WorkManager workManager = WorkManager.getInstance();
workManager.enqueue(workRequest);
}
}
}