2017-02-16 3 views
0

Я в основном пытаюсь извлечь широту и долготу из другого класса, который выполняется каждые 30 секунд. Извлечение должно производиться быстрее, когда широта, значения долготы приближаются к моей целевой широте, долготе со скоростью 5 секунд, а если расстояние до цели превышает скачок в 100 км, выборка значений должна быть указана со скоростью 5 минут. Я попытался с заданием таймера, но не смог перенести в задание таймера.Android java: Выполняйте функцию повторно с задержкой, динамически установленной на основе некоторых условий.

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

timer = new Timer(); 
myTimerTask = new MyTimerTask(); 
timer.schedule(myTimerTask, 0, 30000);//default delay 30 seconds 
class MyTimerTask extends TimerTask { 
@Override 
public void run() { 
latitude = gps.getlatitude(); 
longitude = gps.getlongitude(); 
int distance =getdistance(latitude,longitude,target_latitude,target_longitude); 
if(distance <50) 
//execute timer task with 5 second delay 
else if (distance >100) 
//execute timer task with 5 minutes delay 
} 

ответ

0

Использование Handler класса. Он имеет полезные методы, такие как postDelayed(Runnable r, long delayMillis) and postAtTime (Runnable r, long uptimeMillis) `.

После того, как вы выполните обратный вызов, проверьте, насколько далеко вы достигли цели и долго и, соответственно, меняете delayMillis. Handler - самая близкая к абсолютной надежности вы получите. Если вам нужно более надежное поведение, то AlarmManager является опцией (но может быть излишним)

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