我們的iOS應用程序每次新開始時都會檢索新的應用程序數據,即不會從後臺恢復。應用數據每兩個月通過網絡服務定期更新,所以這通常很好。如何確保iOS應用程序不會無限期地在後臺暫停?
但是,可能會出現邊緣情況,用戶的iOS設備(特別是iPad)可能會使應用程序長時間在後臺暫停,這可能會無限期地發生。
是否有可能通過告訴iOS「請釋放此應用程序,如果它已被暫停超過幾個小時」來緩解這種邊緣情況?
我們的iOS應用程序每次新開始時都會檢索新的應用程序數據,即不會從後臺恢復。應用數據每兩個月通過網絡服務定期更新,所以這通常很好。如何確保iOS應用程序不會無限期地在後臺暫停?
但是,可能會出現邊緣情況,用戶的iOS設備(特別是iPad)可能會使應用程序長時間在後臺暫停,這可能會無限期地發生。
是否有可能通過告訴iOS「請釋放此應用程序,如果它已被暫停超過幾個小時」來緩解這種邊緣情況?
您描述的問題是由於糟糕的應用程序設計或對應用程序體系結構的理解不足。如果您需要更新應用程序數據時,只要應用程序被激活,你可以簡單地調用您的更新功能關閉UIApplicationDelegate事件(或註冊一個通知),具體如下:
applicationDidBecomeActive:
告訴代表說該應用程序已變得活躍。 - (空)applicationDidBecomeActive:(UIApplication的*)應用參數
應用
The singleton application instance.
討論
這個方法被調用,讓你的應用程序知道它從 的激活到激活狀態的移動。這可能是因爲您的應用程序 是由用戶或系統啓動的。如果用戶選擇忽略將 應用程序臨時發送到非活動狀態的中斷 (例如傳入電話或SMS消息),則應用程序還可以將 返回到活動狀態。
您應該使用此方法在應用程序處於非活動狀態時重新啓動暫停的任何任務(或 尚未啓動)。例如,您可以使用它來重新啓動計時器或遏制OpenGL ES幀速率。 如果您的應用程序之前位於後臺,您也可以使用它來刷新應用程序的用戶界面。
在調用此方法之後,應用程序還會發佈一個 UIApplicationDidBecomeActiveNotification通知,讓 感興趣的對象有機會對轉換作出響應。可用性
應用程序設計旨在適合預算緊張。在給定資源的情況下,我們當然可以處理applicationDidBecomeActive,實現Web服務功能以檢查新數據,在應用程序中釋放舊數據,並根據這些新數據重建活動視圖控制器的UI。 – Kevin
咦?您如何首先獲取數據?如果它在應用程序中被硬編碼,那麼當它進入後臺時將其殺死並不會有幫助。如果它調出來檢索新數據,則只需從'applicationDidBecomeActive'進行相同的調用。 –
數據來自網絡服務,在應用程序啓動時訪問,而一個漂亮的小介紹電影播放。問題是沒有獲得新的數據......它以無縫的方式重新加載所有視圖控制器與新數據。 – Kevin
當應用程序暫停時,它不應該刷新。根據Apple的文檔,除非您的應用程序已經註冊了特定後臺進程之一,否則該應用程序將基本凍結,直至其恢復。不應該有任何網絡呼叫。然而,如果你想殺掉應用一旦被暫停的時間過長,你可以實現一個黑客,該黑客註冊一個後臺計時器10分鐘,然後在10分鐘後調用一些你知道會崩潰的垃圾代碼。問題解決了:)
大聲笑懷疑,它通過了應用程序商店批准納粹,但這是一個想法。 – Kevin
爲什麼您的應用程序需要重新啓動才能刷新其數據?這只是一個糟糕的設計。爲什麼不在應用程序啓動或返回前臺時檢查新數據並根據需要更新數據。如果應用程序編寫正確,則不需要重新啓動。 – rmaddy
提交Apple文件錯誤:操作系統應在10分鐘後終止應用程序操作。 – CodaFi
應用程序每次開始新鮮時檢查新數據。問題在於應用程序無限期地處於暫停狀態的邊緣情況。 – Kevin