我讀了很多關於iOS背景知識,但我仍然有理解概念的概念。背景http請求ios上的「殺死應用程序」
當我的應用程序因taskmanager(或由於內存壓力而被iOS所殺)併發生了significantLocationChange或GeoFence時,我的整個應用程序都由iOS啓動,並調用我的回調方法。
這裏第一個問題是:我在什麼狀態?即使是用戶界面部分加載,所以我是前景,但由於顯示屏上沒有任何東西,我認爲它是背景。
我的第二個和主要問題是,如何發送http請求並重新發送它們,如果互聯網連接當前關閉?
我試過使用[NSThread sleepWithInterval]
,dispatch
延遲和NSTimer
。它們都具有相同的不良結果:它在前景中效果很好,在NORMAL背景下很好(用戶按下homebutton),但在上述狀態下效果很差。如果運行速度足夠快,我可以發送多個http請求,但當我需要幾秒鐘睡眠時,我會隨機殺死。當我使用2秒延遲的定時器時,我能夠達到我的「重新發送http請求」方法2-3次,讓所有輸出的應用程序停止。如果我使用我計劃的30秒延遲,我甚至不會收到一次定時器呼叫。
所以最後一個問題是:是否有我需要註冊的背景權限?我已經使用
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
或者它會幫助使用NSOperationQueue?它有我沒有的特殊權限嗎?
Thx爲您的答案。我能夠看到,我真的在後臺(枚舉2),至少這是很好的知道。 – Jens
但是對於你的另一點,我已經使用NSURLSession,問題是,我仍然需要一個定時器或類似的,將調用NSURLSession的方法。而且看起來應用程序在計時器觸發之前就已經死了。 – Jens
這是沒有辦法的,你的應用程序只能獲得少量的時間在後臺運行。因爲我不知道你爲什麼試圖添加一個計時器,所以我會說,不使用計時器就可以解決問題。 –