终止后重新启动iOS应用后的奇怪行为

时间:2015-06-24 08:08:12

标签: ios background-process httpserver

我正在开发一个内部iOS应用程序,它需要HTTP服务器一直在运行。

为此,我使用后台任务使应用程序保持活动状态(在后台播放音频),然后启动HTTP服务器。这是我AppDelegate的代码。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    bgTask = [[MyBackgroundTask alloc] init];
    [bgTask startBackgroundTaskWithTarget:self selector:@selector(backgroundCallback:)];

    httpServer = [[HTTPServer alloc] init];
    httpServer.interface = @"localhost";    
    [httpServer setType:@"_http._tcp."];
    [httpServer setPort:8080];
    [httpServer start];
}

它完美无缺......几乎!

有时候,应用程序在后台运行时会被杀死。例如:

Jun 24 11:27:24 My-iPhone SpringBoard[43] <Warning>: Application 'UIKitApplication:com.test.MyApp[0x668d]' was killed by jetsam.

并且显然 HTTP服务器出现故障。但是当我在终止后重新启动应用程序时,HTTP服务器将无法启动! (当我在Safari中键入localhost:8080时,我看到一条错误消息。)

我没有终止问题,这完全没问题。但是当我重新打开应用程序时,我希望我的HTTP服务器启动并运行。但为什么不发生呢?

(请注意,如果我自己关闭应用程序,一切正常)。

1 个答案:

答案 0 :(得分:0)

也许:

  

准备好处理基于网络的套接字中的连接失败。当您的应用程序因任何原因被暂停时,系统可能会拆除套接字连接。只要您的基于套接字的代码为其他类型的网络故障(例如丢失信号或网络转换)做好准备,这不会导致任何异常问题。当您的应用程序恢复时,如果在使用套接字时遇到故障,只需重新建立连接即可。

或来自https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

的任何其他原因