2016-08-19 277 views
5

我正在構建iOS應用程序iOS 8 & 9我面臨的問題是,當應用程序轉到後臺系統正在終止它後2或3分鐘。如何避免iOS應用程序在後臺被太頻繁終止

我的測試很簡單:

  1. 我殺從我的iPhone上的所有正在運行的應用。
  2. 我重新啓動了我的iPhone(以確保沒有其他應用程序正在使用內存)。
  3. 我啓動我的應用程序。
  4. 我在我的應用程序內沒有做任何事情。
  5. 我按下「Home」按鈕,將我的應用程序移動到背景。
  6. 我等了2到3分鐘不做其他事情。
  7. 我再次打開我的應用程序和驚喜,系統已終止它,現在它重新啓動作爲新的發射。

一些評論:

  • 該應用程序在後臺沒有任何其他服務不使用CoreLocation。
  • 我已經對應用程序進行了剖析,試圖瞭解它是否消耗了太多的內存。移動到背景時,會消耗大約25Mb的RAM內存。我附上下面的截圖。
  • 此行爲已在iPhone 5,5s,6,6+上進行測試。
  • 在iPhone 6s和6s +似乎需要多一點時間才能發生,但仍然會發生。

App Allocations Profile

我的問題是:你知道爲什麼會這樣發生?任何我可能不會考慮或忘記的東西?

我不想強迫我的應用程序使用CoreLocation或類似的東西在後臺運行。如果系統最終殺死了我的應用,我很好。我不想要的是,每次我將應用程序移到後臺時,系統都會終止它。

任何提示或幫助將不勝感激。

感謝,

+0

的方法添加破發點並看到它再次調用'didFinishLaunchingWithOptions' –

+0

您的應用程序實際在做什麼?例如OpenGL調用會讓你的應用程序失效。 –

回答

0

所有應用程序都被系統自動

根據蘋果的文檔被殺:

應用程序終止

的應用必須終止準備隨時發生並且不應該>等待保存用戶數據或執行其他關鍵任務。系統啓動>終止是應用程序生命週期的正常組成部分。系統通常會終止應用程序,以便它可以回收內存併爲其他應用程序騰出空間,並由用戶啓動,但系統也可能會終止應用程序,這些應用程序行爲異常或不及時響應事件。

掛起的應用程序在終止時不會收到通知; >系統殺死進程並回收相應的內存。如果應用程序>當前正在後臺運行並且未掛起,系統將在終止之前調用其應用程序委託的applicationWillTerminate:。 >當設備重新啓動時,系統不會調用此方法。

除了系統終止您的應用程序之外,用戶還可以使用多任務UI來顯式終止>您的應用程序。用戶啓動的終止>與終止暫停的應用具有相同的效果。該應用程序的進程被終止,並且沒有通知被髮送到應用程序。

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html#//apple_ref/doc/uid/TP40007072-CH2-SW1

您可以跟蹤的位置,但你一定會看到一個藍色的狀態欄,以表明應用程序使用GPS跟蹤。

也許你可以嘗試「喚醒」你在後臺無聲地通知應用程序...

如果沒有必要讓你的應用程序還活着,相信系統...

+0

感謝您的留言。我大部分已經意識到這一點。我的問題是爲什麼終止這麼快?如果有什麼我可以做,以避免這一點。在玩其他應用程序時,我發現有些人需要更多時間才能被系統終止。 – vilanovi

+0

@vilanovi你可以檢查它NSLog(@「%f」,[UIApplication sharedApplication] .backgroundTimeRemaining); –

+0

in applicationDidEnterBackground –

-1

其應用在後臺運行耗盡電池的使用壽命更快,它會讓您對設備而非應用程序產生不好的印象,因爲普通消費者並不知道這是應用程序耗盡電池。 因此iOS不允許您的應用程序在後臺運行,超過幾秒鐘。但有一些例外情況,應用程序可以通過聲明其開始後臺任務來請求擴展。

獲取更多信息,您可以檢查下面的鏈接: http://blog.dkaminsky.info/2013/01/27/keep-your-ios-app-running-in-background-forever/

http://www.speirs.org/blog/2012/1/2/misconceptions-about-ios-multitasking.html

+0

我不問關於後臺應用程序的執行情況。請在回答之前閱讀這個問題。 – vilanovi

+0

親愛的vilanovi,對於atlandu的回答你評論說,爲什麼應用程序終止如此之快?對於這個問題,直接的答案是節省電池壽命。對於你的第二個查詢是如何避免這種情況?爲此,我建議通過提供鏈接來使用beginBackgroundTaskWithExpirationHandler。 –

+0

是的,的確如此。但問題的本質不是理解如何讓應用程序在後臺執行,而是試圖瞭解系統爲什麼以及何時被殺死。 – vilanovi

-1
  1. 有些錯誤在你的代碼中。請應用委託選擇調試導航之前運行你的應用程序......現在,你可以找到你的錯誤..

  2. 或過多的內存也將終止..

+0

我已經意識到這樣的問題。在這裏,我正在詢問關於iOS如何管理後臺應用程序的更一般的理解。 – vilanovi

相關問題