2010-06-22 109 views
29

在iOS4.0上單擊iPhone上的主頁按鈕退出該應用程序,並且Apple在他們的指南中以編程方式退出該應用程序未被接受。在iOS 4.0中退出應用程序

現在iOS4.0中的一切都發生了變化,點擊主頁按鈕會將您的應用程序置於暫停模式(多任務處理)..我認爲應該有一個清晰的方式讓用戶退出應用程序,如退出按鈕。

現在可以與蘋果?如何做?

+2

請注意,單擊主頁按鈕只會暫停使用SDK 4.0編譯的應用程序。使用較早的SDK編譯的應用程序(以及[選擇退出]的4.0應用程序(http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/CoreApplication/CoreApplication.html#//apple_ref/doc/uid/TP40007072-CH3-SW24))不暫停,它們終止。 – progrmr 2010-06-23 03:10:13

+0

下面是關於蘋果改變你的方法和改變你的方法的一篇很好的文章:http://www.drobnik.com/touch/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/ – JoePasq 2010-07-05 04:07:04

回答

21

不應該這樣做。

你有不同階段的處理程序,所以這是你應該怎麼做的。手動退出沒有意義。如果您重新啓動應用程序,理想情況下它會從您停止的位置開始,因此可以通過恢復或通過啓動和加載舊狀態來啓動。

無理由退出。

編輯

由於這樣下去再次彈出:iOS Human Interface Guidelines說: 「不要以編程方式退出」。我們已經看到很多關於應用程序的報告,它們過去曾呼籲退出()。

退出而不是通過在Info.plist文件中設置適當的鍵來暫停 - 當然這不是一個專用的UI按鈕,而是由主頁按鈕退出程序的特定應用程序。

+2

我可以看不出爲什麼放置用戶的退出按鈕是不可接受的。每次我雙擊主頁按鈕時,我都有十幾個被暫停的應用程序,並且它們不斷增長,這讓我非常惱火,而且我認爲所有的iPhone用戶都會有同樣的感受。 – Tamer 2010-06-22 21:33:35

+14

你在錯誤地思考它。這些應用不是您的暫停應用。這些應用程序只是用戶最近使用的應用程序。 事實上,他們中的一些處於凍結的不同階段與iPhone無關。 – 2010-06-22 23:08:14

+0

@tewha,這些活動應用程序(從用戶的角度來看),凍結或暫停,但不是用戶最後使用的應用程序。我仍然認爲應該有辦法關閉應用程序,而不是將它們堆疊在任務列表中。 – Tamer 2010-06-22 23:17:46

49

您可以設置Info.plist鍵UIApplicationExitsOnSuspend以確保應用程序已完全終止。

+7

+1是的,你可以選擇退出後臺執行,讓你的應用程序終止而不是暫停,[在這裏閱讀文檔](http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/CoreApplication /CoreApplication.html#//apple_ref/doc/uid/TP40007072-CH3-SW24) – progrmr 2010-06-23 03:08:04

+1

此線程中的「正確」答案不回答問題,相當糟糕的形式。 (即使它有價值)在我的情況下,我有一個敏感信息的應用程序,我寧願每次「註銷」,最簡單的方法就是退出。 – Marius 2011-08-19 17:11:24

+1

+1我同意這是OPs問題的正確答案。 – 2011-12-13 15:05:39

3

我真的有這個問題。退出手動或通過退出是很重要的。

與之前的iPhone操作系統一樣,我的應用程序在終止時寫出了它的狀態(第一次使用或第二次以後等)。當用戶回來時,它想通過閱讀plist來展示不同的東西。此外,它希望在用戶每次退出後返回時顯示第一個屏幕。

隨着應用程序在iPhone OS4的後臺暫停,應用程序返回停止位置(即在用戶所在的位置顯示相同的屏幕),並且永遠不會更改其狀態,因爲applicationWillTerminate現在不會被調用。

由於這是大多數時間所需的行爲(當您暫時離開應用程序時能夠繼續),必須有一種方法可以選擇,即暫停或退出。

由於設置UIApplicationExitsOnSuspend = YES只提供一種方法(即當按HOME時它總是終止),這不是我正在尋找的解決方案。

我希望應用知道一旦整個鏈的步驟完成後,反對只是序列被暫停,並在正確的時間退出。

要做到這一點,我必須能夠終止應用程序,並寫出狀態,一旦使用完成整個序列。其他時候,我只想讓應用暫停。

如果您點擊HOME按鈕兩次,您可以看到暫停的應用程序。我可以通過長時間觸摸來刪除(退出)我的應用程序,並觸摸出現的( - )符號,但這對用戶和步驟不太直觀。

另一種選擇是在我的應用程序中有一個Quit按鈕作爲導航標籤之一,但這很醜陋。現在,我唯一的選擇似乎是選擇設置UIApplicationExitsOnSuspend = YES。

6

另見iOS Debugging Magic (Technical Note TN2239)

要留意的是,iOS的應用程序生命週期是用戶的控制之下,這意味着iOS應用程序不應該只是退出。無論如何,您的發佈版本只能在發生崩潰的情況下調用中止,並且中止調用可以防止損壞用戶數據,或允許您更輕鬆地診斷問題。

雖然關於確定過早退出原因的話題,Understanding and Analyzing iPhone OS Application Crash Reports (Technical Note TN2151)可能是感興趣的。

對不起,有點關注話題,但它涉及早期退出和診斷。

傑夫

-4

你可以把一個應用程序編程背景與本次非公開命令:

(但你的應用程序將會被拒絕,如果你使用它)

[[UIApplication sharedApplication] suspend]; 
+0

私人apis不能用於生產! – ninjr 2013-12-11 16:19:16

3

您可以隨時使用exit(1) 。這是一個原始/強制退出,其中包含一個代碼/原因的整數。 您可以在開發過程中使用此功能,例如在模擬模式下只需要終止;如現在一樣。

8

有編程調用exit()的原因。

假設您有一個始終在啓動時啓動的voip應用程序,並在系統死亡後重新啓動。當內存警告發生時。通常情況下,這是首選行爲,因爲您需要在後臺運行以維護您的voip TCP套接字。但是,如果應用程序支持多種操作模式 - 例如a)使用TCP在後臺運行,以及b)不要在後臺運行,但只能在接受PUSH通知後啓動 - 如果用戶在b)中使用應用程序,模式,他並不喜歡該應用正在消耗可用於其他應用的內存。

因此,如果應用程序可以檢查啓動時是否啓動了後臺並且用戶希望應用程序在b)模式下運行並優雅地運行,那麼它將不再自動重新啓動。

3

這裏是@Joost Schuur的步驟;回答是:

  1. 打開信息。的plist文件

  2. 中添加鍵值UIApplicationExitsOnSuspend或選擇應用程序並 不在後臺運行

  3. 設置新鍵YES或勾選框填寫

斷點在applicationWillResignActiveapplicationWillTerminate將顯示它的工作。

0

你不應該這樣做。當用戶想要退出你的應用程序時,他將按HOME按鈕。

當用戶按下主頁按鈕時,您會收到UIApplicationWillResignActiveNotification通知。使用該通知來清除所有資源。

基本上,當用戶按下home按鈕時,您的應用程序應該「隱藏在一個角落」(消耗盡可能少的內存)。但是,隨着用戶切換的次數越多,應用程序再次顯示時間越長(需要重新加載所有資源)時間越長。