我正在開發一個應用程序,需要每2分鐘保存一次設備GPS位置的軌跡。
第一次嘗試是使用requestLocationUpdates:每2分鐘進行一次GPS跟蹤(requestLocationUpdates,Timer或Handler)
locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 120000L, 0f, this);
爲了測試我使用三星Galaxy迷你(安卓2.3.5)。
如果我使用連接的USB電纜在調試模式下進行測試,那麼每隔兩分鐘我就能找到一個完美的位置。
問題是當我拔掉USB並去街上測試。這樣我每秒鐘就可以獲得一個GPS位置。這太多了。
太多的評論我的代碼後,我決定用一個定時器:
new Timer().scheduleAtFixedRate(new TimerTask(){
@Override
public void run() {
Location loc=getLastBestLocation(Activity.this);
GpsStore.save(loc);
}
}, 120000L, 120000L);
同樣,如果用USB數據線測試在調試模式下的應用程序一切正常。
如果我出去並測試應用程序是否在前臺時一切順利,如果應用程序在後臺,TimerTask不會每2分鐘運行一次,它會停止,並且應用程序返回到前臺時突然運行全部乘以它正常執行的TimerTask。但一切都很快就在1秒左右。
再多的評論我的代碼後,我決定,而不是使用定時器處理:
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
public void run() {
Location loc=getLastBestLocation(Activity.this);
GpsStore.save(loc);
handler.removeCallbacks(this);
handler.postDelayed(this,120000L);
}
};
handler.removeCallbacks(runnable);
handler.postDelayed(runnable, 120000L);
一如既往一切工作在調試模式下罰款USB。當我在街上進行測試時,現在發生的事情是,當應用程序處於前臺時,處理程序不會每隔2分鐘運行一次,有時每隔4秒鐘運行一次,但是應用程序在後臺時按順序運行處理程序不會每2分鐘運行一次,從不運行。
我只會使用requestLocationUpdates,但每秒鐘都會調用它。
我需要你的幫助。謝謝。
感謝您的回覆。我知道'minTime'是一個提示。這就是爲什麼我試圖使用'Timer'和'Handler'。我需要固定時間間隔的GPS座標。必須始終滿足此間隔。我寫的時間間隔是2分鐘,也許30分鐘,但重要的是間隔時間準確完成。有時可能有效,有時不可能。 – jos1980
我做了類似的事情記錄職位。我只是簡單地使用了AlarmManager,併發送了一個PendingIntent給一個Service組件。無論您的活動是否在前臺,都會發生這種情況。 – jsmith
將此評論作爲答覆。這樣人們會投票(或不投票)爲好答案。關於AlarmManager,謝謝,我會嘗試你說的。 – jos1980