2017-02-16 8 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)などのユーティリティメソッドがあります。

コールバックを実行したら、目標の緯度および経度からどれくらい離れているかを確認し、それに応じてdelayMillisを変更します。 Handlerは絶対的な信頼性に最も近いものです。より堅牢な動作が必要な場合は、AlarmManagerがオプションです(ただし、過剰なことがあります)

関連する問題