运行HTTP Server的应用程序在打开Safari时会立即停止侦听请求

时间:2014-08-06 13:37:26

标签: ios objective-c cfnetwork

我已经使用CFNetwork在我的应用上实现了HTTP服务器。
服务器在某个时刻启动,以通过NSFileHandleConnectionAcceptedNotification收听请求。
如果在应用程序处于活动状态时发出请求,则效果很好。
问题是当我从我的应用程序打开Safari以加载此服务器提供的页面时:应用程序转到后台并冻结。 Safari似乎在等待响应,但只有在我回到应用程序时才会出现响应。
如何在服务器切换到Safari并进入后台后,让服务器监听这些请求一段时间?或者如何实现HTTP服务器的最佳方式呢?我只需要在Safari上打开页面然后停止运行。

1 个答案:

答案 0 :(得分:0)

我找到了一种非常简单的方法让它发挥作用。

当应用程序进入后台时,我正在创建后台任务。

刚刚将以下代码添加到applicationDidEnterBackground:

  __block UIBackgroundTaskIdentifier bgTask =
      [application beginBackgroundTaskWithExpirationHandler:^
  {
    dispatch_async(dispatch_get_main_queue(), ^
    {
      [application endBackgroundTask:bgTask];
      bgTask = UIBackgroundTaskInvalid;
    });
  }];