iOS后臺運行-實時定位

1.先說說iOS 應用程序5個狀態:

停止運行-應用程序已經終止,或者還未啟動。

不活動-應用程序處于前臺但不再接收事件(例如,用戶在app處于活動時鎖住了設備)。

活動-app處于“使用中”的狀態。

后臺-app不在屏幕上顯示,但它仍然執行代碼。

掛起-app仍然駐留內存但不再執行代碼。

按下Home鍵時,app從活動狀態轉入后臺,絕大部分app通常在180秒內就從后臺變成了掛起。

在內存吃緊的時候,iPhone會首先關閉那些掛起的app。

現在的iOS系統,都會在你按下Home鍵時,app從活動狀態轉入后臺,絕大部分app通常在300秒內就從后臺變成了掛起;

2.如果想要無限制的后臺運行,那就需要自己向iOS系統申請app后臺運行

現在的iOS系統可以申請后臺運行的api為:

后臺運行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

選擇后臺運行的api

在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一定要和開啟的時候是一個對象

歡迎大家指正和補充,共同學習探討!!!

在這里也要感謝,大家關于定位的博客。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容