问题描述
我基本上是试图从最初每30秒执行一次的另一个类中获取纬度和经度。当纬度,经度值达到我的目标纬度和经度的速率大约为5秒时,应该更快地进行获取。到目标的距离超出了100 km的范围,则应该以5分钟的速度获取值。 我尝试使用计时器任务,但无法在计时器任务中重新安排时间。
如果不通过计时器任务,是否还有其他方法可以实现相同目的? 我的代码看起来类似于下面提到的内容
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
}
1楼
使用Handler
类。
它具有诸如postDelayed(Runnable r, long delayMillis) and
postAtTime(Runnable r,long uptimeMillis)之类的实用方法。
执行回调后,请检查距目标纬度和经度有delayMillis
并相应地更改delayMillis
。
Handler
最接近您获得的绝对可靠性。
如果您需要更可靠的行为,则可以选择使用AlarmManager
(但可能会过大)