Я новичок в этом, поэтому дайте мне знать, если вопрос сформулирован неверно!У меня есть приложение для Android, которое должно выполнять задачу примерно каждые 15 минут, даже если телефон заблокирован.Контекст таков: - Я нацеливаюсь на SDK 23 или выше - Задача 1) принимает местоположение пользователя 2) выполняет вызов HTTPS API с помощью OKHttpClient, затем 3) отправляет результаты в базу данных Firestore
I 'Я использую WorkManager, чтобы попытаться достичь этой цели.Однако проблема в том, что каждый раз, когда он выполняется, он делает это 8 - 9 раз, и это очень нерегулярно по времени.Я могу видеть это из записей Firestore и Logcat.
Является ли WorkManager правильным способом решения этой задачи?Я использую
implementation "androidx.work:work-runtime:2.0.1"
import androidx.work.PeriodicWorkRequest;
import androidx.work.WorkManager;
import androidx.work.ExistingPeriodicWorkPolicy;
Я вижу, что у других была эта проблема: Работник Android выполняет задание несколько раз
//In MainActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(
PeriodicReadings.class, 15, TimeUnit.MINUTES).build();
WorkManager.getInstance().enqueueUniquePeriodicWork("PWR", ExistingPeriodicWorkPolicy.REPLACE, periodicWorkRequest);
//In PeriodicReadings.java:
@NonNull
@Override
public Result doWork() {
getReadings(); //work to be done
return Result.success();
}
Каждые 15 минут я ожидал, что чтениепоявляются в базе данных Firestore, но вместо этого я вижу партии из 8 - 9 показаний, которые появляются с нерегулярными интервалами, меняющимися каждые 15 минут - 2 часа.
Я попытался очистить и перестроить, сделать недействительным и перезапустить кеш, а также перезагрузить приложениепо телефону.