iOS无限后台加速耗电的问题
生活随笔
收集整理的這篇文章主要介紹了
iOS无限后台加速耗电的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
背景 總所周知,iPhone的電池容量本身比較小。所以iOS系統本身為了彌補這一短板做出了一個重大的優化 —— 『偽后臺』。 這一機制是在iPhone在續航上發揮重大的作用,但是也因為『偽后臺』限制了一些更靈活的App響應。 原來早在iOS4開始,iOS為音樂、定位、viop、下載數據等功能提供后臺啟動的條件,從此以后不管是大到『微信』『QQ』『支付寶』,小如『摩拜』單車這樣的應用都獲取用戶的『定位服務』權限,然后通過它在后臺『 無限重啟』,也就是那個時候大家都說『更耗電了』。 實例 發現了嗎,漫山遍野的后臺活動。尤其是『TIM』『Chrome』和『斗魚』;我只是無意中點到這個應用然后隨意看一下,結果發現幾分鐘的前臺工作竟然有十幾分鐘乃至半個小時的后臺活動,這大概就是為什么耗電量越來越大并且iOS越來越卡的根源了把! 機制 『IOS 后臺運行定位介紹及解決辦法』 http://blog.csdn.net/ruglcc/article/details/52020918 這篇文章為我們講述了,如何利用定位在后臺運行的方法。 第一部分 1.先說說iOS 應用程序5個狀態: 停止運行-應用程序已經終止,或者還未啟動。 不活動-應用程序處于前臺但不再接收事件(例如,用戶在app處于活動時鎖住了設備)。 活動-app處于“使用中”的狀態。 后臺-app不再屏幕上顯示,但它仍然執行代碼。 掛起-app仍然駐留內存但不再執行代碼。 按下Home鍵時,app從活動狀態轉入后臺,絕大部分app通常在幾秒內就從后臺變成了掛起。 在內存吃緊的時候,iphone會首先關閉那些掛起的app。 從 iOS 4 開始,應用就可以在退到后臺后,繼續運行一小段時間(10 分鐘); 2.還可以把自己聲明為需要在后臺運行,就能不限時地運行了。 不過限制為播放音樂、使用 GPS 、voip、。 值得一提的是,有的應用為了達到后臺不限時運行的目的,在后臺播放無聲的音樂(審核不一定會被發現)。 iOS 5 開始又多了一種類型:下載報刊雜志。 然后 iOS 7 則可以下載各種玩意和定時抓取。 iOS 7 需要注意的區別:iOS 7 以前,應用進入后臺繼續運行時,如果用戶鎖屏了,那么 iOS 會等待應用運行完,才進入睡眠狀態。而在 iOS 7 上,系統會很快進入睡眠狀態,那些后臺應用也就暫停了。如果收到事件被喚醒(例如定時事件、推送、位置更新等),后臺應用才能繼續運行一會。因為處理過程變成了斷斷續續的,因此下載時也要使用 NSURLSession 來處理(即下文中的 Background Transfer Service)。 3. 在我看來,蘋果限制 app在后臺運行,是為了更有效的利用硬件使用當前的app,不然,過多的app駐留后臺,對手機資源占用是一大問題。 二. ios7以后提供的后臺接口模式 1、Background Audio,這是后臺的音頻,這個很早之前便有,也是iOS設備中用得最多的后臺應用,調用這個接口可以實現后臺的音樂播放。 2、Location Services,這是后臺的定位,系統會擁有統一頁面進行管理。 3、VoIP,后臺語音服務,類似Skype通話應用需要調用,可進行后臺的語音通話。 4、Newsstand,報刊雜志后臺自動下載更新,其能夠自動實時更新。 5、Background Task? Completion,這個接口早在iOS 4時候便擁有,其可以供任意類型的APP使用,不過在舊系統中,這個接口的后臺限制運行時間僅為10分鐘,意味著當應用退至后臺,其后臺運行僅能持續10分鐘便會轉至休眠狀態。iOS 7中對這個接口作出了改變,原來的為連續10分鐘,即不論你這10分鐘內用戶是否關閉屏幕進入休眠狀態,應用仍然會在后臺等待10分鐘完結后推出,而新的改進為假如遇到關閉屏幕休眠的情況,這后臺運行的10分鐘便會跟隨一同休眠,剩余的后臺時間將會留待用戶再一次喚醒設備才計算。這樣后臺運行的時間仍然為10分鐘,但并不連續,這樣做的優點為省電。 如現在有一些詞典應用帶有后臺復制選詞功能,實際上其是利用了這個接口,如果用戶開啟詞典后并推出,即使屏幕關閉,但詞典仍然在后臺運行,電量消耗還是比較大的,在iOS 7上,這個問題可以得到解決。 6、?Remote Notification,這是本次較大的一個改進接口,以往聊天類應用接受推送后點進去需要再收一次信息,這情況在QQ、微信等應用上最為明顯。不過擁有了這個接口后,這情況將不復存在,以后推送將能夠直接啟動后臺任務。值得注意的是remote notification支持silent notification(靜默推送),這樣dropbox這類同步應用可以在后臺以最節能的模式實時靜默同步了,類似布卡漫畫這種也可以推送正在追的漫畫的新章節并在后臺靜默下載,待到下載好再給用戶發送一個本地推送,用戶點開即看無需再聯網。 7、Background Transfer Service,后臺上傳下載。iOS最接近傳統多任務的后臺接口,可供任意類型的app調用,無時間限制。應用場景包括后臺上傳和下載數據,這使得游戲后臺更新數據包,后臺上傳視頻等等都成為可能,但是正如其名字,它只能用于處理上傳下載這種傳輸類的任務,類似后臺剪切板監控這種它就無能為力了。 iOS 7新增的background fetch,這個后臺接口在蘋果WWDC 2013上有提及,其會根據用戶行為自動調整達到效率最優的后臺模式,能夠處理不是很有時效性的信息獲取。例如一些社交、新聞類的應用的后臺信息更新,iOS系統便會根據應用啟動頻率、時間和當前網絡和電量的狀況來智能分配每個應用的后臺獲取頻率和啟動時長。 三 . ?當前社交項目,如何使用ios后臺 1.當前項目特點: a. 在保存長連接的情況下,用戶一直在線,才能即時接收到消息; b. 在初始化連接的時候,需要做很多處理,如果經常連接,必然很耗電, 所以盡力在后臺的時候,不是時常斷開后又連接; 2. 通過以上分析,改選用何種方式來保存app后臺運行 voip不行; 靜音播放,不清除這種方式,是否可以通過審核; vpns推送,可取的方式,(具體方法: 用戶在登錄后,發送一個設備的tokenid; 在發送消息時,平臺根據對方是離線還是在線,來判斷要不要發推送消息) 3.background fetch在該項目中的應用 由于該app在初始化時,需要耗點時間,最好的方式就是通過 ?后臺獲取 ?來處理該工作,這樣能保證用戶的流暢體驗。 第二部分:保持程序在后臺長時間運行 iOS為了讓設備盡量省電,減少不必要的開銷,保持系統流暢,因而對后臺機制采用墓碑式的“假后臺”。除了系統官方極少數程序可以真后臺,一般開發者開發出來的應用程序后臺受到以下限制: 1.用戶按Home之后,App轉入后臺進行運行,此時擁有180s后臺時間(iOS7)或者600s(iOS6)運行時間可以處理后臺操作 2.當180S或者600S時間過去之后,可以告知系統未完成任務,需要申請繼續完成,系統批準申請之后,可以繼續運行,但總時間不會超過10分鐘。 3.當10分鐘時間到之后,無論怎么向系統申請繼續后臺,系統會強制掛起App,掛起所有后臺操作、線程,直到用戶再次點擊App之后才會繼續運行。 當然iOS為了特殊應用也保留了一些可以實現“真后臺”的方法,摘取比較常用的: 1.VOIP 2.定位服務 3.后臺下載 4.在后臺一直播放無聲音樂(容易受到電話或者其他程序影響,所以暫未考慮) 5….更多 其中VOIP需要綁定一個Socket鏈接并申明給系統,系統將會在后臺接管這個連接,一旦遠端數據過來,你的App將會被喚醒10s(或者更少)的時間來處理數據,超過時間或者處理完畢,程序繼續休眠。 后臺現在是iOS7引入的新API,網上實現的代碼比較少,博主也沒有細心去找。 由于博主要做的App需要在后臺一直運行,每隔一段時間給服務器主動發送消息來保持帳號登陸狀態,因而必須確保App不被系統墓碑限制。 博主最先嘗試了很多方法,包括朋友發來的一個Demo,每180s后臺時間過期就銷毀自己然后再創建一個后臺任務,但是實際測試只有10分鐘時間。最后因為考慮到VOIP對服務端改動太大,時間又太緊,所以選擇了定位服務的方法來保持后臺。 究竟有多耗電 圖1: 圖2: 這段代碼說道每180s則會觸發一次后臺監聽,每60s則會開啟一次『定位服務』并且在下一秒停止『定位服務』 這就是說每個APP為了實現『無限后臺』的功能,再不做任何額外事務的情況下,每60s就必須開啟一次『定位服務』。 具體的時間我是算不來但總覺得挺耗電的。。。 『支付寶』的行經 當我關閉了App的『定位服務』后,基本上所有的App的后臺活動都受到了限制,但唯獨只有支付寶例外,這讓我很生氣! 我也定要找到原因,等著。。。 暫時找不到。。。 首先用 retriever 把淘寶與支付寶的 info.plist 配置文件讀出,發現確實在 UIBackgroundMode 加入了 audio 的后臺權限(誰會用支付寶與淘寶后臺聽歌?如何過 apple store 審核的?和蘋果有 python 交易?)已經具備后臺播放無聲文件的條件。 在關閉所有權限,正常使用情況下,支付寶和淘寶 2min 的前臺時間一般帶有 10 到 20min 的后臺時間。在沒有 fetch 和 remote push 的權限下能達到這么久,只有依靠那 180s 的臨時后臺和無聲文件播放吧,顯然前者沒法提供這么久的后臺時間。 微信與 qq 雖然都有此權限,但是因為帶有 voip 與播放音樂功能,也屬于正常權限。是否有知道內幕的來證實一下? https://www.v2ex.com/amp/t/351377
轉載于:https://www.cnblogs.com/apem/p/11423273.html
總結
以上是生活随笔為你收集整理的iOS无限后台加速耗电的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么用html5动画效果,教你如何在网页
- 下一篇: 游戏关键字070805