2012-04-21 54 views
2

這就是我面臨的問題。我正在構建的應用程序的某些部分打開了一些允許連接到各種服務器/服務的c網絡套接字。但是,如果應用程序進入睡眠狀態,這些套接字連接將丟失,並在嘗試重新加載時出錯。所以我想要做的事情基本上是在應用程序再次啓動時通知用戶,應用程序需要重新啓動。主要問題是,我可以向他們展示一個按鈕,通過使用exit(0)來殺死應用程序,而不會讓我的應用程序被拒絕?根據用戶要求殺死iOS應用程序

蘋果公司表示,用戶應該掌握應用何時被殺死,在這種情況下,我看到他們是,但我不確定蘋果對此的看法。有其他人使用過嗎?你被拒絕了嗎?預先感謝您的任何建議!

編輯:

謝謝大家對你的建議。我正在考慮所有事情,但因爲應用程序需要儘快提交,所以我只需要知道,如果我們無法獲得另一個解決方案,如果上述提議的解決方案將被拒絕。

+0

您是否嘗試過不允許該應用在後臺運行?然後,只要用戶退出主屏幕,它就會被殺死。這可能有點侵略性,但會解決問題。 – PengOne 2012-04-21 21:23:14

+0

如何讓它在後臺運行?這是簡單的,蘋果是否真的允許這個沒有被拒絕? – MZimmerman6 2012-04-21 21:24:22

+1

我認爲你應該看到它*需要*作爲bug重新啓動的事實。你真的應該能夠應付去背景和回來的應用程序。 – mattjgalloway 2012-04-21 21:26:16

回答

1

該文檔對此非常明確,「沒有提供用於正常終止iOS應用程序的API。」見Technical Q&A QA1561 How do I programmatically quit my iOS application?

說句實話,終止一個應用程序來清理套接字就像是通過強制應用程序退出而不是調用release來處理內存管理。

+0

-1:有一個公開的一對API來優雅地終止一個應用程序,並有大量的應用程序。使用UIApplicationExitsOnSuspend plist鍵構建應用程序,並讓應用程序向Safari發送合法且有用的URL。你的應用將被終止。 – hotpaw2 2012-04-22 02:20:25

+0

我知道這不是一個優雅的方法,它是一個時間限制問題。不要以爲我很高興我必須殺死應用程序才能清理它。 – MZimmerman6 2012-04-22 17:23:37

0

怎麼樣調出一個模態視圖控制器告訴用戶退出應用程序?你可以使這個視圖控制器沒有任何解僱按鈕,所以用戶有義務殺死該應用程序。

+0

這就是我現在正在做的,我只是不知道這是否會被拒絕的應用程序。因爲這可能看起來像是崩潰,但他們推着一個叫做「殺死應用程序」的按鈕。我認爲這是顯而易見的,但我不確定蘋果的觀點 – MZimmerman6 2012-04-21 21:27:36

+1

不,它不會被拒絕。 AppleGuidelines不會阻止以編程方式殺死應用程序。我正在AppStore上的其中一個應用中執行此操作。 – Niko 2012-04-22 07:13:43

3

您是否嘗試過不允許該應用在後臺運行?然後,只要用戶退出主屏幕,它就會被殺死。這可能有點侵略性,但會解決問題。從蘋果公司的後臺執行的選擇退出:

「如果你不想讓你的應用程序仍然在後臺運行 它退出,你可以明確地通過增加UIApplicationExitsOnSuspend鍵退出後臺執行 模型你的應用 的Info.plist文件,並將其值設定爲YES。

當應用程序退出,則會將不運行, 不活動,和活動狀態之間的它的週期和永遠不會進入背景或 懸浮狀態。

當用戶點擊Home鍵退出應用程序時, applicationWillTerminate:應用程序委託的方法被稱爲 和應用程序有大約五秒鐘,清理和 出口被終止搬回非運行前州。」

參見:How to prevent my app from running in the background on the iPhone

4

您的應用程序委託收到通知時顯著事件影響的應用程序的生命。您應該嘗試停止網絡操作,然後在應用程序生命週期的適當時間自動恢復它們,而不是要求用戶重新創建會話。

您可以優雅地在任意數量的地方殺網絡套接字(除其他事項外)作爲應用程序準備退出或在您的應用程序委託輸入通過回調背景:

applicationWillResignActive: 
applicationWillEnterBackground: 
applicationWillTerminate: 

潛在重建中的插座:

applicationDidBecomeActive 
applicationWillEnterForeground 
+0

已經嘗試過,因爲某些原因,這些套接字不希望重建得當。我們認爲問題在於,當應用程序進入睡眠狀態時,它們實際上正在失去與WiFi網絡的連接,因爲當您將手機切換回3G時。當應用程序恢復時,與applicationDidBecomeActive一樣,當手機再次變爲活動狀態時,當我們稱之爲重新啓動時,它沒有與該WiFi網絡的完整連接 – MZimmerman6 2012-04-21 21:31:45

+1

因此,您說您無法拆除網絡沒有你的應用程序的會話被強制重新啓動?我認爲比強制用戶重新啓動更好的解決方案是嘗試找出一種方法,根據需要啓用和禁用網絡服務。 – isaac 2012-04-21 21:38:05

+0

我們正在努力做到這一點,但遇到了一些問題,並且由於我們很快就需要此應用程序,所以有時間限制才能真正做到這一點。所以我們的失敗保險只是在用戶同意的情況下殺死應用程序。我只想知道蘋果是否會允許這樣做。 – MZimmerman6 2012-04-21 21:49:34