0

我正在尋找一些應用程序設計建議。如何在活動暫停時接收和處理位置更改

我有一個應用程序連接到Google定位服務並跟蹤它接收到的位置座標。這些在UI上顯示爲路徑。

當屏幕超時並變空白時,當然,這個Activity將按照正常的活動生命週期關閉。

但是,我仍然要記錄位置服務中每個onLocationChanged事件回來的座標,但當然,Activity已暫停,因此它不能這樣做。

我並不特別想要防止屏幕在清單中消隱(因此Activity永遠不會暫停)。雖然我相信它仍然會暫停比如說,如果一個電話接收等

的解決辦法是在Activity暫停事件之一(無論是,onStoponSaveInstanceState)啓動一個IntentService接收位置更新,然後當Activity重新啓動時,從服務收集數據並關閉服務。

這是實現這一目標的有效且正確的方式,還是存在一些我不知道的Android黑色藝術?如果是這樣,是IntentService正確的方式去(或應該使用Service)?

回答

0

爲了配合鬆散的目的,我現在添加我自己的答案,現在我已經實現了一些東西。

我的解決方案最後是而不是IntentService。這是因爲我認爲IntentService會認爲它的工作是LocationService的實際設置,並且一旦該工作完成,它就會自行關閉,而不是等待LocationService'ping'。

因此,我實現了一個正常Service,但我將它綁定到調用Activity。我還設置了回撥Activity。這樣,當收到'ping'時,我可以處理它並將數據直接傳回給Activity。此外,只要綁定已到位,Service就會保持活動狀態。當Activity銷燬時,我清除活頁夾。

這工作完全....無論其

後來我發現,該LocationService「坪」沒有在Activity被處理的原因是bacause我斷開GoogleAPIClientActivityonStop被調用。刪除了這個,Activity處理了處於停止狀態的'ping',因此無論如何都不需要Service

因此,正確回答這個問題是... Activity應繼續處理在後臺(除非它破壞了內存管理的目的),所以請你沒有在你的「關機」處理 onStop等停止的東西那麼你不會像我一樣浪費時間寫服務!

0

一個正常的服務,由警報管理器重新啓動是一個更好的主意。

+0

你介意解釋爲什麼這樣更好嗎?這不就是一個由調度程序啓動的「服務」,而不是實際需要的時間(即當我的應用程序暫停時)? – SimonH