2011-10-29 268 views
15

我需要你在我澄清一個應用程序的各種狀態的理解幫助。我將闡明我的解釋 - 但請隨時糾正我。需要澄清UIApplicationState

1)App在前臺啓動並運行:state = UIApplicationStateActive
2)用戶按下home鍵:state = UIApplicationStateBackground(????)。

Debug stmt in my app shows it to be Active 

3)用戶的雙抽頭主頁並殺死該應用:狀態= UIApplicationStateInactive

如果殼體2的值確實是活動的,則當將該值設置爲背景?

我的基於位置的應用程序依賴於這個價值採取適當行動的用戶。

if (([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) || 
    ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive)  ) { 
    // isInBackground = YES; 
    // ------ UI not available 
} 
else { 
    // isInBackground = NO; 
    // ------ UI is available 
} 

Regards, Sam。

回答

51

當用戶點擊應用程序圖標,應用程序通過簡單的在它的途中UIApplicationStateInactive過渡狀態去成爲UIApplicationStateActive。這是應用程序準備向用戶顯示的位置。

當應用程序打開時,應用程序狀態爲UIApplicationStateActive

如果用戶按下主頁按鈕,返回到跳板(主屏幕),或應用程序被中斷的東西,比如一個電話,應用程序的狀態轉換回UIApplicationStateInactive

對於您的應用程序的應用程序狀態變爲UIApplicationStateBackground,您的應用程序將不得不註冊後臺進程。研究如何爲您的位置服務提供背景。

+1

謝謝!!非常清楚地解釋。 – Sam

+3

@forgot它不完全正確。「該應用程序在前臺運行,但目前沒有收到事件。 (儘管它可能正在執行其他代碼。)一個應用程序通常只會在轉換到其他狀態時暫時停留在此狀態。「蘋果文檔說。你可以在這裏瞭解到更多信息.http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html – Kamarshad

+0

我明白,它似乎並沒有與這個問題相關時間。我會編輯它以顯示更完整的答案。 – forgot

2

蘋果文檔: UIApplicationState Constants Reference

  • 斯威夫特:.Active | Objective-C的:UIApplicationStateActive

應用程序是在前臺運行,目前接收事件。

可提供的iOS 4.0及更高版本。

  • 斯威夫特:.Inactive | Objective-C的:UIApplicationStateInactive

應用程序是在前臺運行,但不接收事件。此 可能會因爲中斷或因爲應用程序 轉換爲背景或從背景轉換而發生。

可提供的iOS 4.0及更高版本。

  • 斯威夫特:.Background |目標C:UIApplicationStateBackground

該應用在後臺運行。

可提供的iOS 4.0及更高版本。

0

一些例子:

UIApplicationStateActive - 應用程序在前臺運行。簡單。

UIApplicationStateInactive - E.g.應用程序在後臺並通過推送通知(轉換atm)打開。或者控制/通知中心顯示在您的應用上方。你看到它,在前景。

UIApplicationStateBackground - 應用程序在後臺,但仍在運行。 E.g.正在播放音樂。然後 - 這可能需要一段時間(取決於你在後臺運行的進程),但是有一點你的應用程序被終止。您會在最小化的應用程序之間看到應用程序的快照和圖標,但該應用程序將首先再次啓動。