2011-12-09 48 views
1

我有一個應用程序,從網頁中提取數據並將其填充到UITableView中。我發現我的應用程序即使在點擊主頁按鈕很長時間後也不會終止。我意識到,如果手機內存不足,操作系統將殺死該應用程序。我不想執行「添加密鑰 - >應用程序不會在後臺運行」在pinfo中。我希望應用能夠保持狀態一段時間。我想知道我們是否可以在- (void)applicationWillTerminate:(UIApplication *)application{} 方法中設置一個計時器,以便在應用程序處於非活動狀態(例如1小時)並重新啓動時終止。我們可以在-applicationWillTerminate方法中設置一個計時器嗎?

謝謝。

+0

出於純粹的好奇心,爲什麼你不想在'後臺運行'應用程序不會運行'YES'? – NJones

+0

正如我所說,我正在閱讀一個網頁,我希望我的應用能夠反映網頁上的最新帖子。同時我想保持狀態,這樣如果他們經常重新訪問應用程序,我不會重新加載數據。其實它是你的答案中的第2點。我將嘗試在applicationDidEnterBackground中保存時間:現在。 – curious123

回答

1

當你的應用程序移動到後臺,你可以要求額外的時間(最多,我覺得500秒了嗎?)來完成一些長時間運行的任務(見UIApplication-beginBackgroundTaskWithExpirationHandler:)。但是,你永遠不能安排你的應用程序「醒來」或一旦後臺/終止重新加載。

對於追蹤用戶位置或需要接收傳入VOIP呼叫的應用,此規則有特定的例外情況。如果您的應用符合要求,請參閱iOS應用編程指南中的Background Execution and Mutitasking部分。

3

簡單&快速回答,不可以。在主頁按鈕被按下後,您不能運行一個小時的計時器。你可以做的就是熟悉當用戶按下主頁按鈕然後切換回你的應用程序時所進行的調用。

這些是你現在會收到電話(多任務):

// User taps your app icon first launch 
application:didFinishLaunchingWithOptions: 
applicationDidBecomeActive: 

// User pushes home button 
applicationWillResignActive: 
applicationDidEnterBackground: 

// User selects your app again 
applicationWillEnterForeground: 
applicationDidBecomeActive: 

如果設置Application does not run in background關鍵YES,或者如果您的設備不支持多任務(即iPod touch的第二代),那麼完全相同的動作會調用這些方法。

// User taps your app icon first launch 
application:didFinishLaunchingWithOptions: 
applicationDidBecomeActive: 

// User pushes home button 
applicationDidEnterBackground: 
applicationWillTerminate: 

// User selects your app again 
application:didFinishLaunchingWithOptions: 
applicationDidBecomeActive: 

請注意,如果OS決定殺死你的內存的應用程序,也不會叫你起牀只是爲了殺你,你永遠不會保證收到applicationWillTerminate:電話。

我能想到兩種動機對你的問題的:

1)你想保存狀態,想做到這一點在applicationWillTerminate:,但它沒有被調用。如果是這種情況,我建議將狀態保存在applicationDidEnterBackground:中,因爲在用戶按下主頁按鈕時都會調用狀態。

2)如果應用程序在一段時間內處於非活動狀態,您希望重新加載數據。如果是這種情況,請在applicationDidEnterBackground:期間存儲當前時間,並檢查在applicationDidBecomeActive:中已經過了多少時間,並在必要時重新加載。

相關問題