2011-03-27 109 views
1

假設我有一個實際在後臺運行的iOS應用程序(出於幾種法律原因之一,如背景音頻,請求的時間等)。什麼事情可能會導致操作系統關閉(殺死)這個應用程序,而不僅僅是運行或暫停它?我怎樣才能避免它們?我如何使用公共API可靠地觸發它們(在此應用程序中)?關閉背景中的應用程序

+3

換句話說,您的問題是:我如何將我的應用程序指定爲超級重要的,以便操作系統不會對它施加影響?在大多數情況下,答案是「你不能」。操作系統設計人員通過回答:「如果所有的應用程序都這樣做呢?」例如:http://blogs.msdn.com/b/oldnewthing/archive/2005/06/07/426294.aspx – 2011-03-27 17:03:10

+0

如果多個後臺應用保留較少的髒內存等(問題的主題),更多他們可以留在後臺運行。這個數字仍然是有限的,但更大,這可能會更好。 – hotpaw2 2011-03-27 17:06:33

+1

不幸的是,假設第三方開發者的誠意和合理的能力不是一個好的最終用戶操作系統是如何製造的。如果設計應用程序的越野車或內存飢餓告訴操作系統不要觸摸它,該怎麼辦? – 2011-03-27 17:10:51

回答

0

我不知道你在問什麼 - 這聽起來像你希望能夠終止其他應用,這(謝天謝地)根本不可能在iOS平臺上,由於沙盒等

但是,當您的應用程序在後臺運行時,最有可能的原因是它使用大量的內存等,並且不會響應didReceiveMemoryWarning調用,通過刪除不再需要的資源。

就自動觸發這些而言,最簡單的方法是使用模擬器上「硬件」菜單中的「模擬記憶警告」選項。

3

如果它使用了太多的內存,如果它不叫endBackgroundTask:當到期處理程序(調用beginBackgroundTaskWithExpirationHandler:時指定)被調用時,如果用戶明確地殺死它,如果應用程序拋出一個異常,你的應用程序可能被殺死,電話exit,觸發EXC_BAD_ACCESS或其他信號,依此類推。也可能有其他原因。爲了避免這些,請不要使用太多的內存,在需要時調用endBackgroundTask:,製作一個用戶不想殺的應用程序,不要拋出異常,調用exit,訪問無效的內存位置等等上。

沒有辦法可靠地觸發「用戶明確殺死應用程序」。對於其他用戶,您可以分配大量內存,拒絕撥打endBackgroundTask:,使用[NSException raise:... format:...],撥打exit,或者創建隨機垃圾指針並遵循它們。雖然你可能實際上不應該做任何這些。

+0

調用exit()或取消引用不良指針似乎不是公共API。但是試圖分配大量內存或者不調用endBackgroundTask似乎是公共API的「合法」使用。 – hotpaw2 2011-03-27 17:27:41

相關問題