我正在編寫一個iPhone應用程序,它應該每隔一分鐘自動與服務器同步。我可以讓應用程序同步,但我無法弄清楚如何在後臺跟蹤時間(而應用程序是最重要的)並自動同步。如何在iPhone上設置定期功能才能在Grand Central Dispatch中運行?
我從來沒有做過任何複雜的多線程編程,所以我還是比較新的。
有沒有人有任何想法如何做到這一點?或者至少是一個開始的好地方?
我正在編寫一個iPhone應用程序,它應該每隔一分鐘自動與服務器同步。我可以讓應用程序同步,但我無法弄清楚如何在後臺跟蹤時間(而應用程序是最重要的)並自動同步。如何在iPhone上設置定期功能才能在Grand Central Dispatch中運行?
我從來沒有做過任何複雜的多線程編程,所以我還是比較新的。
有沒有人有任何想法如何做到這一點?或者至少是一個開始的好地方?
如果您試圖每隔一分鐘同步應用程序,那麼這會使應用程序變得更慢並耗盡電池電量。你可以做什麼,你可以檢查一些配置是否改變,然後同步應用程序。
對於這個東西,你可以使用後臺線程來執行一些配置更改時的任務。
您需要考慮應用程序退出時的場景,特殊處理方法爲applicationDidEnterBackground
方法。
你會使用的方法是-(void)applicationDidEnterBackground:(UIApplication *) application
請您把所有的代碼在那裏,一旦應用程序進入後臺,你會做的。
如果你每分鐘都有檢查服務器的東西,我不認爲這是可能的在iPhone上,但有辦法做推送消息。
這裏是推送消息的教程http://mobiforge.com/developing/story/programming-apple-push-notification-services
您可以使用推送通知來提醒用戶一些新的東西是在應用程序中,一旦他們返回到應用程序然後它檢查並抓取來自服務器的任何信息。
希望幫助
要設置重複同步調用,您需要使用重複的NSTimer實例。您可以在Apple的Using Timers Guide中找到您需要設置NSTimer的所有示例代碼。
您可能希望使用dispatch_async使用dispatch_async來阻止UI。或者,如果您使用ASIHTTPRequest網絡庫,它將自動使用NSOperationQueues進行網絡操作。如果沒有,你必須自己做。
我強烈建議觀看2010/2011年的一些Grand Central調度和塊WWDC會話視頻(我假設您是註冊開發人員)。這個話題比一個問題更重要,你需要了解使用GCD的細節。有一點需要注意:如果您的同步過程以應用程序UI更新結束,則必須通過主線程來完成。您需要使用main_queue通過dispatch_async調用您的UI更新方法。會話視頻將解釋這一點。
最後,正如其他人所說的,每分鐘打一次服務器都可能會導致功耗下降。即使你不「同步」,走出網絡的簡單行爲意味着iPhone每次都必須啓動3G無線電。只是要注意的事情。
謝謝!這正是我正在尋找的 – Ahab
如果您想避免混合runloops和調度隊列,請使用dispatch_source_t設置爲DISPATCH_SOURCE_TIMER,並且您可以一步完成所有這些操作。 –
這聽起來像一個電池殺手。每一分鐘_?。你肯定無法在後臺運行它(例如,當用戶使用不同的應用程序時),你的意思是說,還是僅僅在你的應用程序最重要的背景中? – jrturton
只有當我的應用程序是最重要的。對不起,我猜我不應該使用「背景」一詞。也不一定每分鐘同步一次。爲了我的目的,我只需要知道什麼時候一分鐘過去了。 – Ahab