Почему WorkManager запускается несколько раз при запуске моего приложения? - PullRequest
0 голосов
/ 28 июня 2019

У меня есть приложение, в котором я объявил WorkManager, и переопределенная функция doWork () вызывается 3 или 4 раза, как только моё приложение запускается, без запроса системы на запуск в любое время в коде. ..

Я проверил, что в приложении не будет ссылки на WorkManager. В файле App.kt есть только один (который расширяет Application ()).

В App.kt:

class App : Application(){

companion object {
    var appSyncRepository = AppSyncRepository()
}
}

В AppSyncRepository.kt:

class AppSyncRepository {
}

class AppSyncRepositoryWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
override fun doWork(): Result {
    return Result.success()
}
}

Я ожидал бы, что рабочий не будет вызван, потому что я пока не объявил ни OneTimeWorkRequestBuilder, ни PeriodicWorkRequestBuilder.

1 Ответ

1 голос
/ 28 июня 2019

Извините, у меня недостаточно репутации, чтобы комментировать.

В своем тестировании вы установили запрос PeriodicWorkRequestBuilder?Если это так, вы должны отменить его.

В качестве первого шага я бы проверил, что запланировано.

void cancelJob(){
    WorkManager.getInstance(mContext).cancelAllWorkByTag(SYNC_WORK_JOB1);
    WorkManager.getInstance(mContext).cancelAllWork();
    Log.d(TAG, "Job cancelled!");
}

private boolean isWorkScheduled() {
WorkManager instance = WorkManager.getInstance(mContext);
    ListenableFuture<List<WorkInfo>> statuses = instance.getWorkInfosByTag(SYNC_WORK_JOB1);
    try {
        boolean running = false;
        List<WorkInfo> workInfoList = statuses.get();
        for (WorkInfo workInfo : workInfoList) {
            WorkInfo.State state = workInfo.getState();
            running = state == WorkInfo.State.RUNNING | state == WorkInfo.State.ENQUEUED;
        }
        return running;
    } catch (ExecutionException e) {
        e.printStackTrace();
        return false;
    } catch (InterruptedException e) {
        e.printStackTrace();
        return false;
    }
}

Или вы можете запустить в окне терминала

adb shell dumpsys jobscheduler | grep -C 5 SyncWorkManagerService
adb shell dumpsys jobscheduler | grep -B 10 "Pending queue"
...