假設我有一個實際在後臺運行的iOS應用程序(出於幾種法律原因之一,如背景音頻,請求的時間等)。什麼事情可能會導致操作系統關閉(殺死)這個應用程序,而不僅僅是運行或暫停它?我怎樣才能避免它們?我如何使用公共API可靠地觸發它們(在此應用程序中)?關閉背景中的應用程序
回答
我不知道你在問什麼 - 這聽起來像你希望能夠終止其他應用,這(謝天謝地)根本不可能在iOS平臺上,由於沙盒等
但是,當您的應用程序在後臺運行時,最有可能的原因是它使用大量的內存等,並且不會響應didReceiveMemoryWarning
調用,通過刪除不再需要的資源。
就自動觸發這些而言,最簡單的方法是使用模擬器上「硬件」菜單中的「模擬記憶警告」選項。
如果它使用了太多的內存,如果它不叫endBackgroundTask:
當到期處理程序(調用beginBackgroundTaskWithExpirationHandler:
時指定)被調用時,如果用戶明確地殺死它,如果應用程序拋出一個異常,你的應用程序可能被殺死,電話exit
,觸發EXC_BAD_ACCESS或其他信號,依此類推。也可能有其他原因。爲了避免這些,請不要使用太多的內存,在需要時調用endBackgroundTask:
,製作一個用戶不想殺的應用程序,不要拋出異常,調用exit
,訪問無效的內存位置等等上。
沒有辦法可靠地觸發「用戶明確殺死應用程序」。對於其他用戶,您可以分配大量內存,拒絕撥打endBackgroundTask:
,使用[NSException raise:... format:...]
,撥打exit
,或者創建隨機垃圾指針並遵循它們。雖然你可能實際上不應該做任何這些。
調用exit()或取消引用不良指針似乎不是公共API。但是試圖分配大量內存或者不調用endBackgroundTask似乎是公共API的「合法」使用。 – hotpaw2 2011-03-27 17:27:41
- 1. 關閉背景android應用程序
- 2. 如何優雅地關閉背景中的應用程序?
- 3. Twilio視頻通話在應用程序背景中關閉iOS
- 4. 在應用程序的背景上關閉視頻Android
- 5. iOS在應用程序從背景關閉時檢測到?
- 6. 當它進入背景時關閉應用程序
- 7. Android應用程序強制關閉背景顏色變化?
- 8. 安卓關閉應用程序與背景運行
- 9. NSStream在背景中關閉
- 10. (iPhone iOS 4)已關閉並從背景欄中刪除的應用程序
- 11. 即使應用程序已關閉,背景中的信標檢測
- 12. Android應用程序背景
- 13. Android背景應用程序
- 14. Joomla背景應用程序
- 15. 背景中的IOS應用程序?
- 16. 關閉的應用程序
- 17. 在應用程序中調用背景
- 18. 我需要檢查應用程序已關閉或在Android的背景
- 19. Android:如何關閉從我的應用程序打開的應用程序,當所有發送到背景
- 20. 應用程序背景 - 前景狀態
- 21. Android中沒有背景應用程序
- 22. showConfirmDialog後關閉背景JFrame
- 23. OnBackButtonPressed =>我的應用應該關閉或移動到背景
- 24. 做屏幕關閉時的東西,但當應用程序轉到背景時關閉
- 25. IOS:當應用程序關閉或進入背景時保存數組
- 26. 當應用程序退出或移動到背景時,Android關閉服務
- 27. 運行Asyntask代碼當應用程序被關閉或在背景
- 28. Android - 強制應用程序保持「工作」,而背景或關閉
- 29. 如何在應用程序關閉或背景時接收GCM消息?
- 30. 應用程序池關閉
換句話說,您的問題是:我如何將我的應用程序指定爲超級重要的,以便操作系統不會對它施加影響?在大多數情況下,答案是「你不能」。操作系統設計人員通過回答:「如果所有的應用程序都這樣做呢?」例如:http://blogs.msdn.com/b/oldnewthing/archive/2005/06/07/426294.aspx – 2011-03-27 17:03:10
如果多個後臺應用保留較少的髒內存等(問題的主題),更多他們可以留在後臺運行。這個數字仍然是有限的,但更大,這可能會更好。 – hotpaw2 2011-03-27 17:06:33
不幸的是,假設第三方開發者的誠意和合理的能力不是一個好的最終用戶操作系統是如何製造的。如果設計應用程序的越野車或內存飢餓告訴操作系統不要觸摸它,該怎麼辦? – 2011-03-27 17:10:51