2016-03-02 60 views
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?

回答

1

當它被殺時,它被殺死。定時器將無法正常工作 - 故事的結尾 - 對不起


替代可能後臺程序刷新或無聲推送或者用戶可見的本地通知

+0

有趣的事實:當它被殺死了,你可以執行碼。但看起來你不能使用定時器。我已經有用戶可見的本地通知。但是,離開地理圍欄和離線時同時發生的頻率太高(因爲您同時離開wifi並切換到移動設備),所以對於UX而言,當我嘗試重新發送至少2或3條消息時倍。但是,謝謝你的回答,看起來好像沒有什麼可能。你可以聽geochange,嘗試發送一個http請求,如果失敗,那就是它。對可用性非常不利。 – Jens

+0

你需要更多時間嗎? !然後調用beginBackgroundTask!? –

+0

或使用NSURLSession作爲請求可以繼續時殺害IIRC –