WorkManager DoWork увольняют дважды - PullRequest
2 голосов
/ 14 января 2020

Моя цель - запускать простую задачу раз в час. При запуске приложения я регистрирую уникальный период c работа с флагом ExistingPeriodicWorkPolicy.KEEP.

Вот моя реализация:

public class MyWorker extends Worker {

    public MyWorker(Context context, WorkerParameters workerParams) {
        super(context, workerParams);
        // I don't do anyting with workerParams
    }

    public static void enqueueWork() {
        Constraints constraints = new Constraints.Builder()
                .setRequiresBatteryNotLow(true)
                .build();

        PeriodicWorkRequest request = new PeriodicWorkRequest
                .Builder(MyWorker.class, 1, TimeUnit.HOURS)
                .setConstraints(constraints)
                .addTag("MyWorkerWork")
                .build();

        WorkManager.getInstance().enqueueUniquePeriodicWork("MyWorkerWork",
                ExistingPeriodicWorkPolicy.KEEP, request);
    }


    @NonNull
    @Override
    public Result doWork() {
        Log.i(TAG, "doWork");
        return Result.success();
    }
}

Единственное место, где я звоню enqueueWork(), это Application#onCreate.

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        MyWorker.enqueueWork();
    }
}

Вышеуказанная настройка работает нормально. Одна из проблем заключается в том, что иногда doWork вызывается дважды подряд с ~ 30 сек c времени между ними. Это не воспроизводится на 100%, но я вижу это часто, когда я оставляю телефон на ночь, возвращаюсь на следующий день и включаю дисплей телефона в первый раз.

Типичный журнал будет выглядеть так:

01-13 13:29:04.601 19018    19449    I/MyApp: doWork
01-13 13:29:04.700 19018    19124    I/WM-WorkerWrapper: Worker result SUCCESS for Work [ id=37064d6c-297b-4c0d-9fd7-xxxxxxxxxxxx, tags={ com.xxx.MyWorker, MyWorkerWork } ] 
01-13 13:29:42.203 19018    19482    I/MyApp: doWork
01-13 13:29:42.292 19018    19145    I/WM-WorkerWrapper: Worker result SUCCESS for Work [ id=37064d6c-297b-4c0d-9fd7-xxxxxxxxxxxx, tags={ com.xxx.MyWorker, MyWorkerWork } ] 

Интересно то, что это происходит БЕЗ процесса. Если вы испытали это раньше, пожалуйста, помогите.

...