2012-01-25 27 views
0

我有一個服務(與激活鎖定),必須在幕後捕獲用戶廣告位置後面連續運行。 Service實現了LocationListener方法(即onLocationChanged())。Android的GPS業務文檔

然而,它需要一些時間來onLocationChanged()獲取手機調用,所以在此期間我的服務必須做一些事情。我想過使用Thread.sleep(),但會阻止電話調用onLocationChanged()?或者我應該做投票:while(i < 1000,000){++ i;}?

我沒有收到任何使用這些想法如此豐富的GPS的結果;想知道是否有人可以告訴我如何完成這一點。

+0

可以請你上傳你的代碼嗎? – Lucifer

+0

那麼,請求位置更新後,它需要一段時間才能找到位置(特別是第一個位置),這很正常。如果你的服務需要做其他事情,那麼只需調用它需要做的任何事情。在等待'onLocationChanged'時,服務不會被阻塞。但我不是100%,我理解你的問題的全部,爲什麼你需要調用'Thread.sleep()',也不知道你會調用哪個線程。 – Jakar

+0

我需要及時進行GPS記錄(例如,大約每1分鐘一次,每5分鐘一次)。但我不知道該選什麼 - Thread.sleep(30k),我認爲它會阻塞onLocation()方法或者等待可能會耗盡電池的忙。 – Exegesis

回答

0

我解決了這個問題,通過移除WakeLock(浪費電池),做一個10秒的忙等待/線程休眠(以防萬一阻止onLoc()的GPS調用),並使用AlarmManager喚醒設備睡覺並開始服務。

此:在睡眠時得到GPS,也不會消耗電池電量。

1

我認爲你可以使用的wait()和notify()與LocationListener的情況下同步塊。 使用wait(),notify()來搜索樣本。

1

我猜你想保持服務「活着」,而它正在等待位置改變的信息。這由系統照顧,您不必爲此添加代碼。當位置更改信息變爲可用時,onLocationChanged()將在您的服務上下文中調用。