Создать логическое значение, которое сбрасывает его значение в полночь? - PullRequest
0 голосов
/ 24 ноября 2018

Есть ли простой способ создать логическое значение, которое сбрасывает его значение в false в полночь?

Я подумал об использовании оператора if, например

Calendar now = Calendar.getInstance();
    Calendar midnight = Calendar.getInstance();
    midnight.add(Calendar.HOUR_OF_DAY, 23);
    midnight.add(Calendar.MINUTE,59);
    midnight.add(Calendar.SECOND, 59);

    if (now == midnight){
        boolean = false;
    }

Но он работает, только еслидействие выполняется, и мне нужно, чтобы оно запускалось, даже если приложение закрыто

Я знаю, что могу сделать это, используя AlarmManager и Shared Preferences , но мне было интересноесли есть более очевидный простой способ, о котором я не подумал.

1 Ответ

0 голосов
/ 24 ноября 2018

Для этого вы можете просто создать своего рода класс Midnight Resetting Boolean.Получайте значение каждый раз, когда загружается действие, и увеличивайте счетчик на единицу, если оно ложно.

package com.bemoty.booleantest;

import java.util.Calendar;
import java.util.Date;

public class MidnightBoolean {

    private boolean value = true;
    private long lastChanged = 0L;

    public MidnightBoolean(boolean startValue) {
        this.setValue(startValue);
    }

    public void setValue(boolean value) {
        this.value = value;
        this.lastChanged = System.currentTimeMillis();
    }

    public boolean getValue() {
        Calendar lastChangedCalendar = Calendar.getInstance();
        Calendar timeNowCalendar = Calendar.getInstance();
        lastChangedCalendar.setTime(new Date(lastChanged));
        if ((lastChangedCalendar.get(Calendar.DAY_OF_MONTH) - timeNowCalendar.get(Calendar.DAY_OF_MONTH)) < 0) {
            this.setValue(false);
        }
        return this.value;
    }
}
...