2013-06-06 2 views
4

У меня есть TextView для частого обновления времени, которое работает нормально, но проблема в том, что я хочу изменить время расписания для разных условий, но я не могу изменить время расписания. Он по-прежнему устанавливается на начальном этапе.Изменить расписание расписания таймераAtFixedRate

private Long mPeriod = Long.parseLong("8000"); 

public void startTimer() { 
    Logger.i("startTimer", "startTimer"); 

    stopTimer(); 
    mTimer = new Timer(); 
    mTimerTask = new TimerTask() { 
     @Override 
     public void run() { 
      // postInvalidate(); 
      Logger.i("timer", "timer"); 
      Thread th = new Thread(new Runnable() { 

       @Override 
       public void run() { 
        Logger.i("thread", "thread"); 

        Long ll = System.currentTimeMillis(); 

        mRelativeTime = DateUtils.getRelativeTimeSpanString(
          Long.parseLong(mText + ""), ll, 0); 

        Long diff = ll - Long.parseLong(mText + ""); 
        // long diffSeconds = diff/1000 % 60; 
        long diffMinutes = diff/(60 * 1000) % 60; 
        long diffHours = diff/(60 * 60 * 1000) % 60; 

        Logger.d("diffMinutes", diffMinutes + ""); 
        Logger.d("diffHours", diffHours + ""); 
        if (diffMinutes == 0 && diffHours == 0) { 
         Logger.i("5000", "5000"); 
         mPeriod = Long.parseLong("5000"); 
        } else if (diffMinutes < 60 && diffMinutes != 0 
          && diffHours == 0) { 
         Logger.i("30000", "30000"); 
         mPeriod = Long.parseLong("30000"); 
        } else if (diffHours > 0) { 
         Logger.i("600000", "600000"); 
         mPeriod = Long.parseLong("600000"); 
        } 
        **// This line is not working... 
        mTimer.scheduleAtFixedRate(mTimerTask, 0, mPeriod);** 
        // Change text 
        handler.sendEmptyMessage(0); 

       } 
      }); 
      th.run(); 
     } 
    }; 
    mTimer.scheduleAtFixedRate(mTimerTask, 0, mPeriod); 
} 

public void stopTimer() { 

    if (mTimer != null) { 
     mTimer.cancel(); 
     mTimer = null; 
    } 

} 

ответ

2

Я решил свою проблему. Просто проверьте предыдущую задержку, ниже это решение.

private Long mPeriod = Long.parseLong("8000"); 

public void startTimer() { 

Logger.i("startTimer", "startTimer"); 

stopTimer(); 
mTimer = new Timer(); 
mTimerTask = new TimerTask() { 
    @Override 
    public void run() { 
     // postInvalidate(); 
     Logger.i("timer", "timer"); 
     Thread th = new Thread(new Runnable() { 

      @Override 
      public void run() { 
       Logger.i("thread", "thread"); 

       Long ll = System.currentTimeMillis(); 

       mRelativeTime = DateUtils.getRelativeTimeSpanString(
         Long.parseLong(mText + ""), ll, 0); 

       Long diff = ll - Long.parseLong(mText + ""); 
       // long diffSeconds = diff/1000 % 60; 
       long diffMinutes = diff/(60 * 1000) % 60; 
       long diffHours = diff/(60 * 60 * 1000) % 60; 

       Logger.d("diffMinutes", diffMinutes + ""); 
       Logger.d("diffHours", diffHours + ""); 
       if (diffMinutes == 0 && diffHours == 0 && mTimerTask != 5000) { 
        Logger.i("5000", "5000"); 
        mPeriod = Long.parseLong("5000"); 
        startTimer(); 
       } else if (diffMinutes < 60 && diffMinutes != 0 
         && diffHours == 0 && mTimerTask != 30000) { 
        Logger.i("30000", "30000"); 
        mPeriod = Long.parseLong("30000"); 
        startTimer(); 
       } else if (diffHours > 0 && mTimerTask != 600000) { 
        Logger.i("600000", "600000"); 
        mPeriod = Long.parseLong("600000"); 
        startTimer(); 
       } 

       // Change text 
       handler.sendEmptyMessage(0); 

      } 
     }); 
     th.run(); 
    } 
}; 
mTimer.scheduleAtFixedRate(mTimerTask, 0, mPeriod); 
} 

public void stopTimer() { 
if (mTimer != null) { 
    mTimer.cancel(); 
    mTimer = null; 
} 

} 
3

Вы должны создать свой собственный класс CustomTimerTask, который простирается от TimerTask. После этого вы можете использовать mCustomTimerTask (объект CustomTimerTask), чтобы перенести свое время. Here - это ответ, который, возможно, дублируется.

+0

его дублированный вопрос. и ответил тот же парень: P –

+0

Это не дублирующий вопрос. Я хочу перенести мой таймер в TimerTask, который обрабатывал как рекурсию, потому что он запускает TimerTask после перенастройки. –

Смежные вопросы