我知道,當你背景的應用程序,計時器停止運行。但是,當你從背景中回來時,這是什麼行爲?計時器是否保持原來的fireDate
?應用程序背景時,NSTimer的行爲是什麼?
我遇到了一個問題,當NSTimer設置爲在十分鐘內啓動後,有時候我會立即讓定時器在applicationWillEnterForeground:
被調用之前觸發。當它沒有觸發,並且調用了applicationWillEnterForeground:
時,我有一些邏輯來通過比較計時器的fireDate
到當前日期來檢查10分鐘是否已經過去,但是,即使10分鐘過去了,它似乎總是給我一個從當前日期起將來約525秒。
我的理論是這樣的:
的
NSTimer
將在未來從後臺背火的計時器,只要你有沒有錯過了比原計劃更多的預定時間。 (在這種情況下,我們計劃10分鐘的定時器,只要您在後臺進行10-20分鐘,它將在重新進入應用程序時觸發。)如果超過了通過時,它不會觸發,而是在您返回時在未來的同一時間段內安排另一個計時器。 (也就是說如果你用10分鐘的計時器在背景中持續20分鐘以上,當你回來時,它會在你回到應用程序後的將來安排10分鐘的計時器。)
有沒有人有關於此行爲的任何文檔?我的理論純粹是基於觀察,關於背景缺失或者我無法找到背景的文檔。
這反映在[NSTimer文檔](https://developer.apple。 com/documentation/foundation/timer#1667611):「如果一個計時器被安排在特定的時間以及之後每隔5秒觸發一次,那麼計劃的開火時間將總是落在原始的5秒時間間隔上,即使實際如果開火時間延遲至其通過一個或多個預定的開火時間,則在該時間段內定時器僅被開火一次;然後在開火後重新安排定時器以用於下一個預定開火在未來的時間。「 – joakim