Как я могу сделать цикл таймера CountUp? - PullRequest
0 голосов
/ 24 января 2019

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

Я попытался сделать свой собственный таймер обратного отсчета, но я не знаю, как реализовать цикл

private static final long INTERVAL_MS = 1000;
private final long duration;

protected CountUpTimer( long durationMs ){
    super( durationMs, INTERVAL_MS );
    this.duration = durationMs;
}

public abstract void onTick( int second );

@Override
public void onTick( long msUntilFinished )
{
    int second = ( int ) ( ( duration - msUntilFinished ) / 1000);
    onTick( second );
}

@Override
public void onFinish()
{
    onTick( duration / 1000 );
}

А в моем классе:

private void initCountUpTimer()
{
    int SECONDS = 500*60;
    CountUpTimer timer = new CountUpTimer(SECONDS)
    {
        @Override
        public void onTick( int second )
        {

        }
    };
}

Кто-нибудь может мне помочь? Спасибо.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Если вы хотите зациклить, просто запустите ваш таймер снова в onFinish ()

@Override
public void onFinish()
{
    // Start again
}

Рассмотрите возможность использования AlarmManager, JobScheduler, ... Не пытайтесь зацикливаться таким образом, ОС убьет ваш процесс

0 голосов
/ 24 января 2019

Есть несколько API, которые вы можете использовать в Android для этого.

Из официального документа Android -

Рассматривая выполнение работы вне основного потока, учитывайте три фактора:

Может ли работа быть отложена или она должна произойти точно по расписанию? Например, если вам нужно получить какие-то данные из сети в ответ на нажатие пользователем кнопки, эту работу необходимо выполнить немедленно. Однако, если вы хотите загрузить свои журналы на сервер, эту работу можно отложить, не влияя на производительность вашего приложения или ожидания пользователей.

Как только работа начнет выполняться, должна ли ОС попытаться поддержать процесс приложения? Например, декодирование и отображение растрового изображения - это то, что должно произойти, только когда приложение находится на переднем плане, а процесс активен. Однако музыкальный проигрыватель должен продолжать воспроизводить музыку, даже если приложение находится в фоновом режиме и активно не используется.

Начинается ли работа в ответ на срабатывание системы? Этими триггерами могут быть такие вещи, как состояние сети, состояние батареи, уровни памяти и т. Д. Например, вам может потребоваться подождать, чтобы установить связь с вашим сервером, пока вы не выйдете из режима полета. В этом случае, если процесс приложения не работает, вы можете захотеть воссоздать его, когда устройство снова подключится к сети, чтобы вы могли выполнять свою работу.

В зависимости от этих факторов выберите способ выполнения задач

Вы можете проверить, какой метод использовать здесь developer.android.com/guide/background

...