2017-02-16 1 views
0

Ich versuche grundsätzlich, Breite und Länge aus einer anderen Klasse zu holen, die anfangs alle 30 Sekunden ausgeführt wird. Längenwerte erreichen in der Nähe meiner Zielbreite, Länge mit einer Geschwindigkeit von beispielsweise 5 Sekunden, und wenn die Entfernung zum Zielbereich beispielsweise 100 km beträgt, sollte das Abrufen von Werten mit einer Geschwindigkeit von 5 Minuten erfolgen. Ich habe versucht mit Timer-Task, kann aber nicht innerhalb der Timer-Task neu planen.Android Java: Führe eine Funktion wiederholt mit einer dynamisch auf bestimmten Bedingungen eingestellten Verzögerung aus.

Wenn nicht durch Timer-Aufgabe, gibt es eine andere Möglichkeit, das gleiche zu erreichen? Mein Code sieht etwas ähnlich wie der unten genannten

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 
} 

Antwort

0

Verwenden Handler Klasse. Es hat Hilfsmethoden wie postDelayed(Runnable r, long delayMillis) and postAtTime (Runnable r, long uptimeMillis) `.

Sobald Sie einen Rückruf ausgeführt haben, überprüfen Sie, wie weit Sie von Ihrem Ziel lat und lang sind und dementsprechend variieren delayMillis. Handler ist der absoluten Zuverlässigkeit am nächsten, die Sie bekommen. Wenn Sie ein robusteres Verhalten benötigen, ist AlarmManager eine Option (könnte aber ein Overkill sein)

Verwandte Themen