2011-08-01 162 views
1

我試圖找出當 PowerManager.goToSleep() 被調用時,Android服務會發生什麼情況。當PowerManager.goToSleep被調用時,Android服務會發生什麼?

假設設備在x時間內睡着了。當設備退出睡眠狀態時,在服務中沒有LifeCycle方法,例如onPause()或onRestart(),用於通知服務該更改。

我知道根據文檔,所有的WakeLock都被覆蓋,那麼這意味着服務將被銷燬並且不會再次啓動?

http://developer.android.com/reference/android/os/PowerManager.html#goToSleep%28long%29

回答

1

這是否意味着該服務將被銷燬,而不是重新開始?

否。表示服務不變。所有睡眠模式都會停止CPU。

+0

由於包管理器在運行時撤消了我的DEVICE_POWER權限,因此無法執行PowerManager.goToSleep()。 我的問題出自以下 goToSleep()停止CPU,然後在調用goToSleep()之前執行的所有對象必須爲: a)銷燬並喚醒啓動那些對象再次發送。 b)以某種方式保存,以便一旦CPU重新啓動後可以恢復其執行。 我無法弄清楚它是哪一個。 – Archit

+0

我能想到的最接近測試的方法是啓動一個服務,它的onStartCommand()返回START_REDELIVER_INTENT,並在服務仍在執行時強行停止服務。然後立即安排服務重新啓動,從中我可以觀察到onCreate()被調用,意味着服務正在重新實例化。 正在調用goToSleep()會導致類似這樣的行爲? – Archit

+0

@Archit Joshi:「程序包管理員在運行時撤消了我的DEVICE_POWER權限 - 」你從來沒有得到過這個權限。 「我無法弄清楚它是哪一個。」 - 它只是保存在RAM中。 「調用goToSleep()會導致與此類似的行爲嗎?」 - 沒有。 – CommonsWare

相關問題