2011-11-25 61 views
4

我正在處理基於套接字的客戶端 - 服務器應用程序。鎖定iPhone斷開僅在iOS 5上的插座

當運行iOS 4,4.2.1,4.3.2等中的任何iDevice的用戶在連接到服務器時單擊鎖定按鈕時,連接保持活動狀態。

但是,當我在任何運行iOS 5的設備上單擊鎖定按鈕時,連接立即被銷燬,並且從鎖定屏幕返回到應用程序後,我將看到在調用NSStreamEventErrorOccurred方法時調用的NSAlertView。

我已經有幾個客戶端測試應用程序,並且他們每個人與iOS 5都有這個完全相同的問題 - 無論設備(iPod 2g,iPod 4g,iPhone 3GS,iPhone 4)。

iOS 5設備處理鎖的方式是否有任何更改?我怎樣才能解決這個問題?

編輯:

我應該提到的項目在Xcode 4(iOS 4的SDK)開始,目前正在在Xcode 4.2中使用。不知道這事與否。

+2

可能的重複[iPhone應用程序網絡連接斷開與新的IOS 5.0 sdk屏幕鎖定後](http://stackoverflow.com/questions/7866651/iphone-app-network-connection-disconnect-after-screen-locking-with-new-ios- sdk-5) – 2011-11-25 15:02:59

+0

這將是有趣的知道這是否是獨特的5.0.1或5.0是否有相同的行爲考慮到電池節省'錯誤修復'蘋果在5.0.1添加 – Dolbz

+0

啊從複製的外觀啊出現它不是5.0.1的具體,它是一個iOS 5的功能 – Dolbz

回答

1

正如評論中那樣,iOS 5中有一個新的「功能」,當用戶鎖定設備時將應用程序發送到後臺,這有效地殺死了網絡活動。

使用beginBackgroundTaskWithExpirationHandler:來標記需要套接字訪問的代碼的關鍵部分。這應該允許代碼在應用程序在後臺運行一段時間後運行。完成後不要忘記撥打endBackgroundTask

0

其實我不認爲在iOS 5中,當你鎖定設備時,一個活動的應用程序將被髮送到後臺模式,它會變得不活動。我做了一些測試,如果你有一個網絡下載開始,然後發送應用程序到後臺,網絡套接字不會被殺死,但暫停。您可以等待10秒以上(應用程序在後臺掛起前,應用程序默認的延遲時間爲10秒),然後將應用程序放回到前臺,您可以看到中途完成的網絡下載恢復。雖然如果您鎖定設備並立即解鎖,您將會遇到網絡錯誤,因爲您的套接字已斷開連接。這告訴我,當設備被鎖定時,ios 5不會僅僅將您的應用程序發送到後臺,它也會立即斷開您的網絡套接字(使用擴展後臺任務時間可能不會幫助您)

+0

當設備屏幕轉向編輯關閉,我的iOS應用程序停止發送數據到套接字。然後打開屏幕,套接字連接斷開/管道錯誤。如何解決它? – Stella