Создание задержки между измерениями - PullRequest
1 голос
/ 14 октября 2010

Я пытаюсь сделать набор измерений силы сигнала, поэтому я хочу сделать задержку между выполнением одного и того же метода (который возвращает необходимое значение) - значение1 ... задержка .... значение2 .... задержка. ... В настоящее время я использую

Thread.sleep(DELAY);

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

Ответы [ 5 ]

3 голосов
/ 14 октября 2010

Вы можете использовать Runnable и обработчик.

private Runnable mUpdateTimeTask = new Runnable() {
    public void run() {

        // Get the difference in ms
        long millis = SystemClock.uptimeMillis() - mStartTime;

        // Format to hours/minutes/seconds
        mTimeInSec = (int) (millis / 1000);

        // Do your thing

        // Update at the next second
        mHandler.postAtTime(this, mStartTime + ((mTimeInSec + 1) * 1000));
    }
};

И начать это с обработчиком:

mHandler.postDelayed(mUpdateTimeTask, 100);

Конечно, вы должны иметь глобальный mHandler (частный обработчик mHandler =новый обработчик ();) и время запуска (также uptimeMillis).Это обновляется каждую секунду, но вы можете изменить его на более длительный период времени.http://developer.android.com/reference/android/os/Handler.html

1 голос
/ 14 октября 2010

Чтобы использовать Timer, вы создаете экземпляр Timer

Timer mTimer = new Timer();

Теперь можно запланировать задание, которое вы хотите запустить.

mTimer.scheduleAtFixedRate(new TimerTask() {  
public void run() {  
//THE TASK  
}  
}, DELAY, PERIOD);

DELAY = количествовремя в миллисекундах до первого выполнения.

LONG = количество времени в миллисекундах между последующими выполнениями.

Подробнее см. здесь .

1 голос
/ 14 октября 2010

Существует учебник о , как создать простой таймер обратного отсчета для Android .Вы можете посмотреть, это может помочь.

1 голос
/ 14 октября 2010
java.util.concurrent.Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new java.lang.Runnable()
{
  @Override
  public void run()
  {
    System.out.println("call the method that checks the signal strength here");
  }
  },
  1,
  1,
  java.util.concurrent.TimeUnit.SECONDS
 );

Это фрагмент кода, который будет вызывать некоторый метод после начальной задержки в 1 секунду каждую 1 секунду.

0 голосов
/ 14 октября 2010

Страница документации для ScheduledExecutorService дает хороший пример того, как ее использовать:

import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
  private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

  public void beepForAnHour() {
    final Runnable beeper = new Runnable() {
      public void run() {
        System.out.println("beep");
      }
    };
    // Run the beeper Runnable every 10 seconds after a 10 second wait
    final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate( beeper, 10, 10, SECONDS ) ;

    // Schedule something to cancel the beeper after an hour
    scheduler.schedule( new Runnable() {
      public void run() {
        beeperHandle.cancel(true);
      }
    }, 60 * 60, SECONDS);
  }
}
...