我設置了一個帶有RTC_WAKEUP標誌的鬧鐘,每30秒運行一次IntentService以將位置更新發送到服務器。我打算將該標誌更改爲RTC,以便在另一個進程喚醒手機時不會喚醒手機並運行。如果我離開LocationListener註冊,它會在手機睡着的時候仍然偵聽位置更新嗎?Android LocationListener在手機睡着時離開
回答
是 - 工作位置服務擁有自己的喚醒鎖。然而,更好的方法是在廣播接收器中手動設置適當的喚醒鎖定。請考慮一些優化 - 每30秒通過網絡發送數據將耗盡電池。
這裏有多個問題。
我設置了一個帶有標誌RTC_WAKEUP的警報,每30秒運行一次IntentService以將位置更新發送到服務器。
首先,您甚至可能在30秒內沒有獲得第一次修復,特別是在使用GPS時。你需要考慮到你可能會從得到一個修復(例如,用戶在一個地下位置)。
二,請允許這個數字是用戶可配置的,包括一個選項「我會手動上傳數據」。正如@piotrpo指出的那樣,這是電池的重要消耗。事實上,如果你使用的是GPS,我懷疑電池能持續使用幾個小時。
第三,在這種情況下,IntentService
將無法正常工作,因爲IntentService
將在您的修復程序到達之前關閉。充其量,你會泄漏內存。最糟糕的是,你不會得到你的修復,因爲Android終止你的過程。
進行背景位置檢查的更好方案是使用常規Service
而不是IntentService
。常規服務將在onStartCommand()
中註冊LocationListener
,並且在不存在修復的情況下安排超時通知(例如,AlarmManager
和set()
)。修復程序到達時,運行AsyncTask
來完成上載。當AsyncTask
完成時,或者如果超時到達並且您沒有得到修復,請取消註冊監聽器並呼叫stopSelf()
關閉該服務。一路上,您將需要維護自己的WakeLock
,以確保設備在所有這些都在進行時保持清醒狀態。
有關大多數(減去服務器上載部分)的示例,請參閱我的LocationPoller
。
如果你每30秒鐘左右發生一次死亡事件,那麼你完全可以根本不打擾AlarmManager
。你將不得不有永久服務,永久運行,永久WakeLock
和永久LocationListener
。當修補程序到達onLocationChanged()
時,如果修復程序距上一個修補程序超過30秒,請將其上載。而且,當您發佈應用程序時,請務必穿上阻燃服,因爲運行它的人可能不太喜歡這個結果。
- 1. 在手機睡着時獲取短信
- 2. 手機睡覺時BroadcastReciever沒有開機
- 3. Android手機睡着時的網絡訪問
- 4. Android手機睡眠時發送udp
- 5. 保持位置監聽器活着的時候,手機睡覺
- 6. Android - 後臺服務不運行,如果手機睡着
- 7. 繼續執行功能,而Android手機睡着了嗎?
- 8. 當手機睡着時,是否可以在android手機屏幕上顯示一些最小文本?
- 9. AlarmManager,當手機睡着時不叫鬧鐘
- 10. 在手機在睡覺時處理NFC
- 11. 手機在睡覺時在Android中發出通知
- 12. Android:手機在睡眠時GPS位置更新?
- 13. android如何在手機進入睡眠狀態時處理android定時器
- 14. 打開Android手機
- 15. 離子阻止手機只有在應用程序運行時纔會睡眠
- 16. 如何知道Android手機何時要睡覺?
- 17. 睡覺時使用MediaRecorder導致Android手機重啓
- 18. 聽signalStrength當手機睡覺
- 19. android locationlistener
- 20. Swift:保持NSTimer在計算機睡着時運行(OSX)
- 21. 手機開機時在Android中啓動BroadcastReceiver?
- 22. HTML開發Android手機
- 23. Android手機 - 全球開發
- 24. Android手機,什麼單位被關閉在睡眠模式下
- 25. 爲Android手機開發什麼手機開發?
- 26. 離子手機號碼驗證Android
- 27. 丟失的內容如果我離開了我的Android手機一段時間
- 28. android:在手機處於睡眠狀態時使用TTS的正確方法
- 29. HTML5打開iPhone或Android手機相機
- 30. serviceworker手機離線
我不是問如何獲取位置檢查,我只是好奇,如果我離開了一個聽衆,並且手機睡着了,它還會被註冊嗎? – Hank
不一定。 – CommonsWare
不一定,這是什麼意思? – Hank