0
我開發了一個在後臺使用地理圍欄的iOS應用程序。發生此類事件時,我想發送一個HTTP請求。如果該請求失敗,我想在通話之間幾秒鐘的延遲時間內重試幾次。我正在使用UIBackgroundMode
作爲'位置'。NSTimer不會在KILLED背景中啓動
我NSTimer
計劃看起來像這樣:
dispatch_async(dispatch_get_main_queue(), ^{
[NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(updateFence:) userInfo:fence repeats:NO];
});
這工作前景和「正常」的背景很好,但如果應用程序被殺害和被iOS的新地理圍欄事件開始。在這種情況下,第一個http調用可以工作,但是當我以延遲30秒的時間啓動NSTimer
時,它將永遠不會調用目標選擇器。
除了UIBackgroundMode
之外,還有什麼東西需要用來在(死亡)背景中使用NSTimer
?我是否在特殊背景模式的錯誤runloop/thread上調度Timer?
有趣的事實:當它被殺死了,你可以執行碼。但看起來你不能使用定時器。我已經有用戶可見的本地通知。但是,離開地理圍欄和離線時同時發生的頻率太高(因爲您同時離開wifi並切換到移動設備),所以對於UX而言,當我嘗試重新發送至少2或3條消息時倍。但是,謝謝你的回答,看起來好像沒有什麼可能。你可以聽geochange,嘗試發送一個http請求,如果失敗,那就是它。對可用性非常不利。 – Jens
你需要更多時間嗎? !然後調用beginBackgroundTask!? –
或使用NSURLSession作爲請求可以繼續時殺害IIRC –