2011-09-22 81 views
0

如何知道應用程序是否由用戶終止?如何知道應用是否被用戶終止?

(雙擊Home鍵,然後按下紅色的減號「 - 」按鈕)

我需要樣品或僞代碼...

+0

的可能重複[如何知道應用程序是否被用戶或iOS(10分鐘背景後終止) ](http://stackoverflow.com/questions/7343404/how-to-know-whether-app-is-terminated-by-user-or-ios-after-10min-background) – Ali

回答

2

有時候你得到的(你也可以實現applicationWillTerminate:方法在你的應用程序委託中),但不能保證你在這種情況下完全得到任何通知。所以不要依賴它。

如果您的應用程序處於「暫停」狀態,即在後臺但未運行,您將不會收到通知。在暫停的情況下,您只會因不可捕捉的SIGKILL而死亡。當你因內存不足而死亡時也是如此。

從文檔applicationWillTerminate:(重點煤礦):

對於不支持後臺執行或者是針對iOS的3.x的鏈接或更早版本的應用程序,當用戶退出應用程序這種方法總是叫。對於支持後臺執行的應用程序,當用戶退出應用程序時通常不會調用此方法,因爲在這種情況下應用程序只是移至後臺。但是,在應用程序在後臺運行(未暫停)且系統因某種原因需要終止該應用程序的情況下,將調用此方法可能會

+0

爲什麼?我認爲這是有保證的。但如果您在Xcode中停止應用程序,則無法保證。 – Nekto

+0

@Nekto:查看更新的答案。 – DarkDust

2

試試這個:

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    /* 
    Called when the application is about to terminate. 
    Save data if appropriate. 
    See also applicationDidEnterBackground:. 
    */ 
} 

你應該實現上面的類,它實現UIApplicationDelegate

一些更多的筆記方法:該方法不會被調用,如果你停止你的應用程序通過Xcode(停止調試按鈕)。所以測試時要耐心等待。

+2

未調用此方法。我檢查了控制檯(Organizer-Devices) – ChangUZ

+0

NSLog(@「_____ Appliction will term-。」);不叫。我把這個代碼放在applictaionWillTerminate方法中。 – ChangUZ

+0

我總是停止調試模式後測試。 – ChangUZ

2

當用戶關閉應用程序:

- (void)applicationWillTerminate:(UIApplication *)application{ 

} 

應用將進入非激活狀態:

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    NSLog(@"Application Did Resign Active"); 
} 

用戶按下Home鍵:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    NSLog(@"Application Did Enter Background"); 
} 
+0

你檢查applicationWillTerminate是否被調用? – ChangUZ

+0

我已經嘗試從跳板和XCode中殺死應用程序,並且它沒有被調用,我想你將不得不實現applicationDidEnterBackground以確保你的應用程序做你想要的。 – ender

+0

我設法讓這種方法起作用的唯一方法是在應用的Info.plist中禁用「多任務」。這是確保這種方法總是被調用的唯一方法。然而,這不是一個好的解決方案,所以只需在applicationDidEnterBackground中執行任務即可 – ender

0

也有是這樣的:

- (void)applicationDidEnterBackground:(UIApplication *)application { 

} 

可能是,如果你想知道沒有它進入後臺有幫助;)

相關問題