2011-08-29 76 views
1

我有NSTimer每15秒檢查一次服務器的最新數據。 當應用程序被切換到後臺,我停止計時器在下面的應用程序委託方法iPhone - NSTimer問題當iphone鎖

- (void)applicationWillResignActive:(UIApplication *)application 

當應用程序回來活躍,我啓動定時器,它再次變得活躍

- (void)applicationWillEnterForeground:(UIApplication *)application 

這功能正常工作。 但是當我離開iPhone時,它會在一段時間後鎖定。 當我解鎖它時,功能不能正常繼續。計時器未運行。

我在做什麼錯?

我不想讓計時器在後臺運行。這就是爲什麼在去背景之前,我正在禁用計時器,當涉及到前景時,我想重新啓動計時器。

+0

您是否每十五秒啓動一次新的網絡連接?這可能會導致網絡活動過度。如果用戶使用的是3GS而不是WiFi,那麼您將佔用其每月配額的很大一部分。考慮打開一個持久的TCP連接,然後從連接中讀取後臺線程。如果沒有數據,它將進入休眠狀態,並在服務器向您發送數據時喚醒。或者,您可以使用輪詢或選擇系統調用來檢查傳入數據而不使用後臺線程。 –

+0

謝謝唐吉訶德。我使用持久化的NSURLConnection。所以我認爲,這與你所說的相似。 – Satyam

回答

1

我想你可能需要一個額外的委託方法,而不是applicationWillEnterForeground。我認爲,當用戶解鎖他們的手機時,您的應用程序已經處於前臺,因此不會進入。但我不確定代表方法是什麼,也許applicationDidBecomeActive

+0

你說得對。對「applicationWillResignActive:」的稱讚是'applicationDidBecomeActive:',而不是'applicationWillEnterForeground:'。當手機解鎖並且應用程序位於前臺時,不會調用「applicationWillEnterForeground:」。 –

0

這是多麼的Apple background processing作品...

您可以創建一個後臺任務,這將使的NSTimer的工作背景,但他們的時間是有限的,你不能把它在一直在努力背景。

+0

我不想讓計時器在後臺運行。這就是爲什麼在去背景之前,我正在禁用計時器,當涉及到前景時,我想重新啓動計時器。 – Satyam