2017-02-16 1 views
0

기본적으로 처음 30 초마다 실행되는 다른 클래스에서 위도와 경도를 가져 오려고합니다. 위도, 경도, 경도 값은 목표 허위, 경도와 5 초 정도의 거리에 도달하며, 목표 거리가 100km 범위를 벗어나는 경우 값 가져 오기는 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)`와 같은 유틸리티 메소드를 가지고 있습니다.

콜백을 실행 한 후에는 타겟 lat 및 long에서 얼마나 떨어져 있는지 확인하고 그에 따라 delayMillis을 변경하십시오. Handler은 절대적인 신뢰성에 가장 가깝습니다. 좀 더 강력한 동작이 필요한 경우 AlarmManager이 옵션입니다 (과도한 행동 일 수도 있음)

관련 문제