2013-09-10 90 views
2

我有一個計時器應用程序,它計數無限期的時間(直到用戶停止計時器)。它非常像默認的iOS時鐘秒錶。如何防止我的計時器應用被iOS終止

我已閱讀有關作爲負責任的後臺應用程序的文章。我沒有任何UI變化發生,當應用程序在後臺運行時停止計時器,並在返回到前臺時恢復計時器。該應用每隔30分鐘發送一次本地通知以提醒用戶休息一下。

問題:沒有失敗我的應用程序幾個小時後(2-6小時左右)終止,當前計時器和信息丟失。

事情我已經嘗試:

-As上述我改變了我的應用程序遵循的是一個負責任的後臺程序(之前,我有定時器計數UI起來也定時器運行,即使在後臺準則)。我認爲這會解決問題,因爲我的應用程序沒有使用太多內存或執行任何密集型任務。

- 我也嘗試在ApplicationWillTerminate中保存當前計時器(到NSUserDefaults)的數據,然後在DidFinishLaunchingWithOptions上恢復它。它似乎沒有工作。這幾乎就像我的應用程序強制退出或某事,因爲如果ApplicationWillTerminate被調用,那麼它會保存數據並在應用程序再次啓動時恢復它。神祕。

- 目前我正在ApplicationDidEnterBackground上保存NSTimer的開始時間的NSDate,使計時器無效,並啓動計時器並在ApplicationWillEnterForeground上恢復開始時間。仍然沒有運氣。

事情是這影響到我的用戶的一小部分 - 所以它不像它是每個人的問題,這使得它更容易混淆。當然,我仍然想要修復它,因爲這是一個非常蹩腳的錯誤 - 我自己也遇到了它(在iPhone 5上),所以它不一定是舊的iPhone低內存或其他問題。

這真讓我非常吃驚,我已經完成了我的研究,並且也很好地搜索了堆棧溢出問題,並且似乎找不到任何幫助我的東西。

任何幫助將不勝感激,隨時提出更多問題或告訴我澄清。

+0

爲什麼操作系統殺死你的應用程序很重要?您可以在應用程序運行時安排本地通知,用戶仍然可以看到這些通知。正如您現在所做的那樣,您可以節省開始時間。如果用戶沒有使用您的應用程序,則無需使用空間和電源就可以坐在後臺。 – Caleb

+0

因爲當用戶輸入應用程序時,我希望他們查看自啓動以來應用程序的運行時間以及應用程序死機時信息丟失的時間。我認爲問題是(正如Wain指出的那樣)ApplicationWillTerminate沒有被調用 - 所以信息不會被保存。我正在測試,以確保儘管。我仍然覺得很奇怪,儘管在幾個小時後我的應用程序被殺死了,特別是因爲我在後臺沒有任何事情發生。 – LazerLex

回答

2

applicationWillTerminate基本上不會被調用。當你的應用程序在後臺並且它從內存中移除時它不會被調用。如果您的應用程序暫時未使用,您應該期望您的應用程序從內存中移除。 「一段時間」的時間長短取決於設備當時在做什麼......最好使用applicationDidEnterBackground:applicationWillResignActive:

+0

有關applicationWillTerminate的信息不會被調用。事情是我將數據保存在applicationDidEnterBackground(定時器的開始時間的NSDate)中,然後在ApplicationWillEnterForeground上恢復。仍然沒有運氣。 App仍然會被殺死,就好像它是一個內存密集型應用程序。 – LazerLex

+1

你必須期待它被'殺死'(從內存中刪除)。如果要保存並正確恢復,它在恢復操作時不應該有所作爲。 – Wain

+0

所以當你說「保存和恢復正確」,你的意思是保存到NSUserDefaults(像我試過),並恢復ApplicationDidFinishLaunchingWithOptions上的值?或者你的意思是國家保存? – LazerLex

2

當你的應用進入後臺時,記錄你的計時器的經過時間(例如:在NSUserDefaults中,或者你喜歡)。同時記錄當前時間。當應用程序回來到前臺,看你記錄的兩個值,並相應地更新所經過的時間,即:

elapsedTime = savedElapsedTime +(currentTime的 - timeWentIntoBackground)

確實沒有理由您的應用需要在後臺保持激活狀態,燃燒用戶的電池只是爲了跟蹤時間。

另外,不要依賴applicationWillTerminate。使用applicationWillEnterBackground。

+0

所以我實際上正在做這件事,我的應用程序在幾個小時後仍然死亡。我沒有在後臺執行任何任務(除了正在發送的那些UILocalNotifications)。 – LazerLex

相關問題