2012-08-12 69 views
0

我正在調查我的應用程序在運行時創建的調試文件,並且看到一個奇怪的行爲: 應用程序使用NSURLConnction從服務器檢索一些數據。連接已啓動,然後用戶通過按主頁按鈕(application:willResignActiveapplication:didEnterBackground方法被調用)將應用程序移動到可能的背景。 在調用application:didEnterBackground後,我可以看到在我的代碼中處理了連接。 (NSURLConnection代表connectionDidFinishLoadingapplication:didEnterBackground之後被調用)。在執行connectionDidFinishLoading時,我執行了一些操作,但此時應用程序可能被暫停並且代碼未被調用。 然後,用戶在將近12小時後再次啓動應用程序(未終止,但僅在後臺運行),並且代碼從停止運行的同一點繼續運行,即使在調用application:willEnterForegroundapplication:didBecomeActive之前)。 它是否使場景? 在應用程序進入前臺之前運行的代碼部分改變了我的應用程序內部狀態並導致奇怪的行爲。進入後臺後,應用程序是否繼續執行網絡操作?

任何想法如何解決它?

回答

0

收到application:didEnterBackground之後,你有5秒左右的時間完成整理工作,之後你的應用程序不再安排在CPU上。

就你而言,最好的解決方案是通過beginBackgroundTaskWithExpirationHandler:宣佈後臺工作的開始,並完成下載和相關任務。

+0

感謝您的回答。連接非常短,並在應用程序的5秒限制之前結束:didEnterBackground。我可以在調試文件中看到didEnterBackground被調用,然後幾毫秒後連接結束(didFinishLoading被調用) – user1513930 2012-08-14 04:55:38

相關問題