锁定iPhone仅断开iOS 5上的套接字

时间:2011-11-25 14:58:46

标签: iphone ios locking ios5 nsstream

我正在开发基于套接字的客户端 - 服务器应用程序。

当在iOS 4,4.2.1,4.3.2等上运行任何iDevice的用户在连接到服务器时单击锁定按钮时,连接仍然有效。

但是,当我在运行iOS 5的任何设备上单击锁定按钮时,会立即销毁连接,并且在从锁定屏幕返回到应用程序时,我会看到在调用NSStreamEventErrorOccurred方法时调用的NSAlertView。 / p>

我有几个客户端测试应用程序,并且每个iOS5都有这个完全相同的问题 - 无论是设备(iPod 2g,iPod 4g,iPhone 3GS,iPhone 4)。

iOS 5设备处理锁的方式有变化吗?我该如何解决这个问题?

编辑:

我应该提到该项目是在Xcode 4(iOS 4 sdk)中启动的,现在正在Xcode 4.2中使用。不知道这是否重要。

2 个答案:

答案 0 :(得分:1)

在评论中,iOS 5中有一个新的“功能”,当用户锁定设备时,它会将应用程序发送到后台,这有效地杀死了网络活动。

使用beginBackgroundTaskWithExpirationHandler:标记需要套接字访问权限的代码的关键部分。这应该允许代码在应用程序在后台运行一段时间后运行。完成后别忘了打电话给endBackgroundTask

答案 1 :(得分:0)

实际上我不认为在iOS 5中,当您锁定设备时,活动应用程序将被发送到后台模式,它将变为非活动状态。我做了一些测试,如果你有一个网络下载启动,然后将应用程序发送到后台,网络套接字不会被杀死,而是暂停。您可以等待10秒以上(假设您的应用在应用程序在后台暂停之前的默认延长时间为10秒),然后将应用程序恢复到前台,您可以看到中途完成的网络下载恢复。如果您锁定设备并立即解锁,则会因为插座已断开连接而遇到网络错误。这告诉我ios 5不仅在设备锁定时将您的应用程序发送到后台,它还会立即断开您的网络套接字(使用扩展后台任务时间可能对您没有帮助)