2017-02-18 46 views
2

我想做一個應用程序,可以使計時器在後臺運行。斯威夫特3 - 如何使計時器在後臺工作

這裏是我的代碼:

​​

上面的代碼將執行,將調用本地通知功能。 這個工程當應用程序在前臺,我如何使它在後臺工作?

我試圖把幾條打印線,我看到,當我最小化(按下主頁按鈕)應用程序,計時器停止,當我回到應用程序,它恢復。

我想定時器仍然在後臺運行。有沒有辦法做到這一點?

這是我希望發生的:

運行的應用程序 - >等待10秒 - >通知收到 - >等待10秒 - 收到>通知 - >並返回到等待,並再次獲得

出現這種情況當在前景。但不在後臺。請幫助。

回答

2

定時器可在僅當以下條件爲真後臺運行:

  • 你的某些其他原因運行應用程序在背景中。 (大多數應用程序不會;大多數應用程序都會在進入後臺時暫停)。並且:

  • 定時器已運行時,應用程序已將轉換爲的背景。

+0

你不能開始在後臺運行一個計時器,通過包裝它在backgroundTask?儘管如此,它最終會被它的過期處理程序(3分鐘)殺死? – Honey

+0

根據我的經驗,如果應用程序未啓動任何後臺模式,「NSTimer」將在應用程序進入後臺時停止運行。但是當應用程序回到前臺時,計時器可以繼續運行,但後臺的時間間隔將會丟失。 –

0

正如其他人指出的那樣,Timer無法在後臺運行方法。你可以做什麼,而不是使用while循環裏面的異步任務

DispatchQueue.global(qos: .background).async { 
       while (shouldCallMethod) { 
        self.callMethod() 
        sleep(1) 
       } 
} 
+0

偉大的解決方案! –