2016-09-27 78 views
0

我有一個android/winphone應用程序。應用程序(背景廣播接收器/任務)不時(小時約10-15分鐘)的一小部分使用時間戳檢查本地文件,如果時間戳和當前時間之間的差異變得超過 - 比如說 - 30分鐘,它會顯示通知一個用戶。iOS上的後臺任務計時器

在Android中,我使用AlarmManager.setRepeating(...)來設置定期檢查,並運行此設置代碼,我在Manifest中的操作「android.intent.action.BOOT_COMPLETED」上註冊BroadcastReceiver。或者在每次啓動時調用AlarmManager.cancel(...)和AlarmManager.setRepeating(...)。這樣我可以確定我的計時器工作。

在Windows通用中,我使用觸發器和後臺任務。這與一些限制相同。

現在我正在將應用程序移植到iOS,並且快速查找並沒有給我一種註冊函數或類的方法,以便每10分鐘執行一次快速檢查(通常少於一秒),而應用程序本身不是推出,並且我想在設備啓動事件上註冊一個功能。可能嗎? 或者我應該讓我的應用程序在後臺運行?我寧願不這樣做,因爲我的支票是輕量級和罕見的。

回答

1

您可以使用後臺獲取快速執行。 但有幾個缺點:

  1. 不能在睡眠模式下工作。

  2. 您無法捕獲設備啓動事件。

  3. 它將在30秒內丟棄。

我認爲在一般情況下,這不是AlarmManager的模擬。忘掉它。

https://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial

https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

推送通知可以被用作觸發。但是,儘管如此,這是一個服務器端實現。

在上面的指南:

  1. 檢查框背景在應用程式的能力的背景模式獲取。

  2. 使用setMinimumBackgroundFetchInterval(_:)設置適合您的應用的時間間隔。

  3. 在您的應用程序委託中實施application(_:performFetchWithCompletionHandler:)以處理後臺提取。

你的回調事件是performFetchWithCompletionHandler

+0

感謝的答案! RW文章中的背景獲取限制了10分鐘 - 或者不是?我看到了Candy Crush,我相信它也是一樣的(因爲它警告恢復生命,基本上我認爲同樣的計時器檢查)。所以它看起來像可生成的背景檢查是可能的。但接下來 - 這樣的應用程序會永遠保存在背景中嗎?而如果一天中需要下載32字節的文件和當前的版本號 - 如何做到這一點(由於緩慢/錯誤的網絡,它應該需要超過30秒,而通常需要幾個)? – Tertium

+0

如果執行很多,則該進程將被iOS殺死。我必須測試長期線程。我得到了同樣的問題:'AlarmManager'是iOS。爲了達到我的目的,我決定不使用後臺提取在發佈應用程序中定期啓動。但是可能你會爲你找到一個很好的實現。 – Vyacheslav

+0

但是,如果我只是忘記了網絡查詢,只讀本地文件並檢查我的定時器 - 它會在應用程序進程關閉後工作嗎?每10分鐘<1秒並不多。仍然不太明白它是如何工作的,在談論背景獲取時你是指什麼類/方法? beginBackgroundTaskWithExpirationHandler? – Tertium