2016-03-02 61 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 –