我有一個應用程序應該定期運行後臺服務,我正在使用AlarmManager來實現這種行爲。長話短說,它設置爲每分鐘運行兩次(每30秒),大約需要20秒才能執行(主要是睡眠)。Android AlarmManager有時會遲到
我正在使用多個Android設備進行測試(Galaxy 4.2與4.1.2,Nexus 4與4.2.2和更高版本,CyanogenMOD 10.1.2和Nexus 7與4.2.2),並且所有這些設備在連接時表現一致USB和調試器。
一旦我拔下設備並將其放在桌面上,我注意到有時候服務將會錯過一個間隔。仔細查看日誌,我發現服務有時會延遲一段時間。如果它應該在xx:05和xx:35運行,我會注意到它在xx:45開始(比它應該晚10秒)。
服務所做的第一件事就是獲取部分喚醒鎖,以確保CPU在運行時不會進入休眠狀態 - 這個喚醒鎖只有完全按照它應該做的那樣才能釋放。
我的第一個想法是,這是導致行爲的一些共享資源爭用(還有其他進程與應用程序一起運行),但該服務甚至沒有啓動,它甚至沒有獲得喚醒鎖,直到某些10秒後。
值得一提的是,這種行爲在Nexus 4上最爲突出,其中多達30%的數據丟失,而Galaxy SII和Nexus 7上的數據量大幅減少(約爲2%),但它仍然是一個值得關注的問題。這是無法解釋的行爲。
謝謝你的回覆。看起來,您所描述的概念提高了Nexus 4的可靠性,其可靠性與Galaxy S2相當 - 但仍然有一個「數據包」顯然缺失(自從我做出更改以來,它已經超過了500個) )。不幸的是,該日誌在該事件發生後被截斷,所以我不能確切地看到發生了什麼。 – Iv4n
我將此答案標記爲已接受,因爲所包含的信息提高了定時服務的可靠性。仍然有0.2%的下降率,我還不能解釋。 – Iv4n