2012-07-23 135 views
0

我想開發一個應用程序 - 一項服務 - 將用戶位置更新爲服務器,例如每1小時更新一次。實現位置更新服務的最佳方式

我從Android文檔,我不得不使用「機器人服務」明白,我必須做的onStartCommand()

的工作,但因爲我需要不斷地發送這些位置更新每隔1小時,然後我需要在onStartCommand()內運行無限循環...對不對?

現在,我的問題是:

  • 如果系統殺死服務會發生什麼,我知道我的服務將開始,但它會叫onStartCommand()也?

  • 是否有更好的方法來實現位置更新,例如系統每隔1小時週期性地調用onStartCommand()方法是否可能?

+0

對不起,延遲應對...昨天我非常疲倦,我不得不在發佈問題後去睡覺。無論如何,我會檢查報警管理器的例子,我會回傳我的發現。謝謝。 – user836026 2012-07-24 06:53:25

+0

我發現這個鏈接上的Alarm exmaple也非常有幫助。 https://github.com/commonsguy/cw-advandroid/tree/master/SystemServices/Alarm – user836026 2012-07-24 21:47:38

+0

另一個提示。您可能需要發送stickyBroadcast。發送警報時sendStickyBroadcast(intent)。即使服務停止,這些廣播仍然存在。你然後在廣播上註冊一個空接收器來檢查它的最後值是什麼。可能也可以在SharedPreferences中存儲信息。 – 2012-07-24 21:53:20

回答

2

AlarmManager,正如其他職位所述,是您正在尋找的。

但是,它違背了Android最佳實踐,以「永遠,每小時」的方式運行。如果你從「每小時,每一天」開始,你可能會採取會損害用戶電池壽命的行爲。

每小時打開一次gps,等待它獲得一個鎖,然後關閉它,比檢查位置時「更智能」更多的電池壽命。

如果你做得對,例如setInexactRepeating,嘗試使用WiFi位置,設置監聽器進行位置更新,然後您可以擁有您的蛋糕(電池使用壽命長)並且也可以吃(還可以獲得您需要的信息)。

有關如何保持從佔用太多的電池(也可能得到卸載)你的應用中的一些好的建議,看看在2012這段視頻來自谷歌IO:http://www.youtube.com/watch?v=PwC1OlJo5VM

編輯:看看這個: http://developer.android.com/reference/android/location/LocationListener.html

您可以設置一個偵聽程序,只有在設備的位置發生變化時纔會被調用。 YMMV,但看看。

+0

Thanks Eagle ...我還在http://stackoverflow.com/questions/4459058/alarm-manager-example找到了一個Alarm Manager的例子 – user836026 2012-07-24 21:49:10

2

一種可能的方法是查看AlarmManager。您可以安排您的應用程序在一段時間內運行。你也可以確定,也許我從最後一小時開始沒有改變,並延長延遲以延長電池壽命。

AlarmManager Documentation

2

是...搜索AlarmManager ..這就是你所需要的東西。 您可以安排打電話的意圖,因此每小時啓動一次服務。