1.先說說iOS 應用程序5個狀態:
停止運行-應用程序已經終止,或者還未啟動。
不活動-應用程序處于前臺但不再接收事件(例如,用戶在app處于活動時鎖住了設備)。
活動-app處于“使用中”的狀態。
后臺-app不在屏幕上顯示,但它仍然執行代碼。
掛起-app仍然駐留內存但不再執行代碼。
按下Home鍵時,app從活動狀態轉入后臺,絕大部分app通常在180秒內就從后臺變成了掛起。
在內存吃緊的時候,iPhone會首先關閉那些掛起的app。
現在的iOS系統,都會在你按下Home鍵時,app從活動狀態轉入后臺,絕大部分app通常在300秒內就從后臺變成了掛起;
2.如果想要無限制的后臺運行,那就需要自己向iOS系統申請app后臺運行。
現在的iOS系統可以申請后臺運行的api為:
3、iOS為了讓設備盡量省電,減少不必要的開銷,保持系統流暢,因而對后臺機制采用墓碑式的“假后臺”。除了系統官方極少數程序可以真后臺,一般開發者開發出來的應用程序后臺受到以下限制:
1.用戶按Home之后,App轉入后臺進行運行,此時擁有180s后臺時間(iOS7)或者600s(iOS6)運行時間可以處理后臺操作
2.當180S或者600S時間過去之后,可以告知系統未完成任務,需要申請繼續完成,系統批準申請之后,可以繼續運行,但總時間不會超過10分鐘。
3.當10分鐘時間到之后,無論怎么向系統申請繼續后臺,系統會強制掛起App,掛起所有后臺操作、線程,直到用戶再次點擊App之后才會繼續運行。
4.下面我就使用定位服務來實現iOS的后臺無限制運行
4、代碼實現
4.1、配置工程
在工程->targets->Capabilities->Background Modes
在info.plist中配置定位權限:
4.2、直接擼代碼:
因為iOS7、iOS8、iOS9中定位都有所區別,所以我們需要判斷不同的系統版本來進行相應的處理
判斷系統版本:[[[UIDevice currentDevice] systemVersion ] floatValue]
運用系統的定位方法,在這里我封裝了一個定位方法:
GitHub地址:https://github.com/CookiesFor/Location.git
4.3、使用方法:
在你需要啟用后臺定位的地方
先判斷手機的后臺定位是否可用:
手機定位如果可以使用,則開啟定位服務:
self.bgLocation = [[BGLogation alloc]init];
[self.bgLocation startLocation];
在需要關閉的時候關閉定位服務:
[self.bgLocation stopLocation];
注意:此處的self.bgLocation一定要和開啟的時候是一個對象
歡迎大家指正和補充,共同學習探討!!!
在這里也要感謝,大家關于定位的博客。