Сброс таймера после полуночи - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть несколько пользователей в моем приложении, сообщающих о странном поведении сброса времени / ошибки, я был сбит с толку этим и после тестирования и сбора журналов - я подумал, что мой таймер, если он запускается до полуночи, сбрасывается в Более 20 часов, я не могу понять, почему или как это предотвратить.

Проект с открытым исходным кодом, и любой желающий может помочь мне с этим, вот ссылки:

GitHub

Информация о приложении / проекте:

  • Выберите приложения, выберите желаемое время блокировки, заблокируйте приложения.

My Timer Class (Full)

Фрагмент времени / даты

calendar = Calendar.getInstance();
    simpleDateFormat = new SimpleDateFormat("H:M:ss");

    mTimer = new Timer();
    mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 5, NOTIFY_INTERVAL);
    intent = new Intent(str_receiver);


    //DB
    db = new DB_Helper(this);
}

@Override
public void onTaskRemoved(Intent rootIntent) {
    Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
    restartServiceIntent.setPackage(getPackageName());

    PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT);
    AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    assert alarmService != null;
    alarmService.set(
            AlarmManager.ELAPSED_REALTIME,
            SystemClock.elapsedRealtime() + 1000,
            restartServicePendingIntent);

    super.onTaskRemoved(rootIntent);
    Log.e("Service_Auto_Restart", "ON");
}

public String twoDatesBetweenTime() {


    try {
        date_current = simpleDateFormat.parse(strDate);
    } catch (Exception e) {

    }

    try {
        date_diff = simpleDateFormat.parse(db.get_Data(1));
    } catch (Exception e) {

    }

    try {


        long diff = date_current.getTime() - date_diff.getTime();
        int int_hours = Integer.valueOf(db.get_Hours(1));
        long int_timer;
        if (int_hours > 10) {
            int_timer = TimeUnit.MINUTES.toMillis(int_hours);
        } else {
            int_timer = TimeUnit.HOURS.toMillis(int_hours);
        }
        long long_hours = int_timer - diff;
        long diffSeconds2 = long_hours / 1000 % 60;
        long diffMinutes2 = long_hours / (60 * 1000) % 60;
        long diffHours2 = long_hours / (60 * 60 * 1000) % 24;


        if (long_hours >= 0) {
            str_testing = String.format("%d:%d:%02d", diffHours2, diffMinutes2, diffSeconds2);
            Log.e("TIME", str_testing);
            db.set_TimerFinish(0);
            //db.set_Running("Y");
            fn_update(str_testing);
        } else {
            stopService(new Intent(getApplicationContext(), Timer_Service.class));
            notification_update();
            db.set_TimerFinish(1);
            db.set_Running("N");
            //db.set_LockTime("");
            db.set_Hours("");
            db.set_Data("");
            //db.set_openCounter(0);
            db.set_openTimes(0);
            mTimer.cancel();
        }
    } catch (Exception e) {
        stopService(new Intent(getApplicationContext(), Timer_Service.class));
        db.set_TimerFinish(1);
        db.set_Running("N");
        // db.set_LockTime("");
        db.set_Hours("");
        db.set_Data("");
        //db.set_openCounter(0);
        db.set_openTimes(0);
        mTimer.cancel();
        mTimer.purge();
    }

    return "";

}

Есть предложения?


EDIT:

  • Таймер работает нормально, если кто-то установит блокировку, например, 30 минут, он обратный отсчет 30 минут и разблокируется, когда это будет сделано.

Допустим, кто-то начал блокировку в 21:30:00, таймер будет работать нормально и завершится в 10:00: 00.

Однако, если кто-то запустил блокировку в 23:55:00 на 30 минут, «Оставшееся время до разблокировки» увеличится до 21 часа вместо 30 минут. Это происходит только тогда, когда начинается новый день / таймер запускается до полуночи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...