4

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

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

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

我有几个客户测试过这个应用程序,每个使用 iOS 5 的客户都有这个完全相同的问题 - 无论设备是什么(iPod 2g、iPod 4g、iPhone 3GS、iPhone 4)。

iOS 5 设备处理锁的方式是否有任何变化?我怎样才能解决这个问题?

编辑:

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

4

2 回答 2

1

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

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

于 2011-11-26T20:08:18.453 回答
0

实际上,我不认为在 iOS 5 中,当您锁定设备时,活动应用程序将被发送到后台模式,它只会变为非活动状态。我做了一些测试,如果你开始了网络下载,然后将应用程序发送到后台,网络套接字并没有被杀死,而是被挂起。您可以等待 10+ 秒(10 秒应该是您的应用在后台挂起之前的默认延长时间),然后将应用带回前台,您可以看到一半完成的网络下载恢复。而如果您锁定设备并立即解锁,您将遇到网络错误,因为您的套接字已断开连接。这告诉我 ios 5 不只是在设备锁定时将您的应用程序发送到后台,

于 2011-11-30T18:26:24.490 回答