【问题标题】:Locking iPhone disconnects sockets on iOS 5 only锁定 iPhone 只会断开 iOS 5 上的套接字
【发布时间】:2011-11-25 14:58:45
【问题描述】:

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

当用户在 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 中使用。不知道这是否重要。

【问题讨论】:

标签: iphone ios locking ios5 nsstream


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 当设备屏幕关闭时,我的 iOS 应用停止向套接字发送数据。然后重新打开屏幕,套接字连接断开/断开管道错误。如何解决?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2011-12-13
    • 2012-11-22
    • 2014-10-09
    相关资源
    最近更新 更多