2014-09-10 84 views
1

在我的應用程序中,我使用後臺服務,因此在用戶終止應用程序時不會調用方法applicationWillTerminate:。相反,當用戶將應用程序推入後臺並且用戶完全終止應用程序時,將調用方法applicationDidEnterBackground:用戶強行終止應用程序:註冊此事件

我遇到的問題是我需要能夠區分用戶何時將應用程序推入後臺以及何時退出應用程序,因爲我需要爲兩個事件觸發不同的代碼。

這是可能的在我的情況?

回答

1

當系統「很好地」以一種有序的方式終止應用程序(即,它沒有爲待處理任務執行後臺操作,或者它告訴操作系統這些任務已完成)時,將調用該方法-applicationWillTerminate:。這與「用戶強行終止應用程序」截然不同,在這種情況下,您的應用程序不會收到任何消息,因爲它只是被一個項目符號總結爲頭部。

您確定您正確/完全參與後臺服務嗎?也就是說,你確定你正確地告訴系統你已經完成了嗎?你應該編輯你的問題併發布相關的後臺代碼。例如,如果你使用-beginBackgroundTaskWithExpirationHandler:,文檔說:

如果你不叫endBackgroundTask:時間到期前每個任務,系統殺死應用程序。

......這可能是你的問題嗎?

+0

後臺服務工作正常。該應用收集的位置更新沒有任何問題。我需要知道應用程序被推入後臺或終止的原因是,當推送到後臺時,應用程序會註冊本地通知。我不希望在應用程序終止時發生這種情況。 – freshking 2014-09-10 18:21:46

+0

對不起,我想我很難得到你要的東西。你的應用程序被後臺或用戶「退出」沒有有效的區別;如果它不是活動的應用程序,請考慮終止/後臺爲*無論原因。對於位置服務,此行爲在此處定義:https://developer.apple.com/library/ios/documentation/userexperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2- SW10你能更準確地知道你想要完成什麼嗎? – 2014-09-10 18:31:32

0

這可能是不可能的,但我可以想象區分兩者的唯一方法就是等待下一個事件。 當下一個事件是「開始」時,您知道上一個事件是殺人事件。 當下一個事件是「前景」時,您知道上一個事件是背景。

這意味着在服務器上的一些處理,我知道。

希望這會有所幫助。