4

我在我的應用程序中使用了核心位置框架,並且在應用程序在後臺運行時將位置字符串設置爲UIBackgroundMode或所需的背景模式(在Xcode 4.2中)以從didUpdateToLocation方法獲取更新的位置,並將此更新的位置發送到服務器通過點擊didUpdateToLocation核心位置框架內的具體鏈接。ios是否會在特定時間後終止在後臺運行的應用程序?

我的問題是,在後臺運行一段時間後,應用程序會終止嗎?

回答

10

沒有,是this.But應用程序定義沒有具體的時間必定會終止基於特定參數 - 電池消耗,內存佔用問題等

在它清楚地提到開發者文檔 - 「系統保持暫停應用程序儘可能長時間地存儲在內存中,只有當可用內存量變少時纔會將其刪除,剩餘內存意味着後續啓動應用程序的速度要快得多。

通過這個完整的細節 - http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

+0

謝謝,這個鏈接是非常有用的。還有一個問題,我想問一下,我們是否需要在didUpdateToLocation方法內部進行任何事件處理,因爲當應用處於後臺狀態時,在上述鏈接的給定文檔中陳述了「不處理事件時睡眠」。 – iosuser

+0

如果你有興趣獲得位置,即使它在睡眠中,那麼你需要使用這個,否則沒有具體的。 – rishi

+0

當應用程序進入睡眠狀態? – iosuser

0

快速的答案是幾乎沒有。深入閱讀以下內容。

由於在iOS設備上啓用了多任務處理:a)您的應用程序獲得了分配的內存量; b)設備限制任何給定時間發生的任務數量,即使用內存的應用程序數量。如果您使用iOS設備並打開多個應用程序,則會開始注意到您首先打開的應用程序可能已被終止並從viewDidLoad重新加載。

一般而言,如果您的應用程序是最近打開的應用程序(或者甚至在某人經常清除多任務菜單的電話上),則說明該設備將在後臺終止您的應用程序而不是

1

我已經看到後臺位置更新將工作幾個小時。但是如果我去一個沒有接待的地方,設備會停下來發送GPS更新,當我去一個接待處時,它不會開始。這發生在大約30分鐘後。

但如果我添加此,在iOS6的,應用程序將不會終止

[locationManager setPausesLocationUpdatesAutomatically:NO]; 
+0

請注意,您正在繞過優化。與activityType一起,系統將智能地停止向您的應用程序提供位置數據(如果您已設置健身活動類型,並且您不會移動超過幾分鐘的時間,那麼暫停設備的工作以跟蹤您,直到您開始移動再次......),這也意味着無線電被關閉,節省電池壽命。如果您將管理員設置爲永不停頓,它確實會繼續提供位置數據,但在這種情況下,您可能會在設備執行更多工作時更早終止iOS。 – Daniel

1

iOS應用程序可能會終止由於以下原因:

  1. 看門狗超時

正如你可能知道,自iOS 4.x以來,大多數時候當你 退出iOS應用程序,該應用程序未終止 - 相反,它發送到 的背景。

However, there are times when the OS will terminate your app and 
generate a crash log if the app didn’t respond fast enough. These 
events correspond with the implementation of the following 
UIApplicationDelegate methods: 

    - application:didFinishLaunchingWithOptions: 
    - applicationWillResignActive: 
    - applicationDidEnterBackground: 
    - applicationWillEnterForeground: 
    - applicationDidBecomeActive: 
    - applicationWillTerminate: 

在所有的上述方法中,該應用程序獲得的時間 完成其處理量有限。如果應用程序需要的時間太長,操作系統將終止應用程序 。

  • 用戶強制退出
  • 的iOS 4.x的支持多任務處理。如果應用阻止用戶界面並停止響應,用戶可以雙擊主頁 屏幕上的主頁按鈕並終止該應用。

    注意:您可能已經注意到,當您雙擊主頁按鈕 時,您也會看到過去運行的所有應用程序的列表。 這些應用程序不一定在運行,也不一定會暫停 。

    通常一個應用程序需要大約10分鐘時間才能保持在後臺 用戶點擊主頁按鈕,然後由操作系統自動終止 。因此,通過雙擊主屏幕按鈕 看到的應用程序列表只是過去應用程序運行的列表。

  • 低存儲器終端
  • 當繼承的UIViewController,你可能已經注意到 didReceiveMemoryWarning方法。

    任何在前臺運行的應用程序在訪問和使用內存方面都具有最高優先級 。但是,這並不意味着 應用程序會獲取設備上的所有可用內存 - 每個應用程序都會獲得可用內存的 部分。

    當總內存消耗達到一定水平時,操作系統發出一個 UIApplicationDidReceiveMemoryWarningNotification通知。在 的同一時間,爲應用調用了didReceiveMemoryWarning。

    此時,爲了讓您的應用程序繼續正常運行,操作系統 開始在後臺終止應用程序以釋放一些內存。一旦 所有後臺應用程序終止,如果您的應用程序仍然需要更多 內存,操作系統會終止您的應用程序。

    相關問題