從開發者的角度分析iOS應如何省電

說明

網上關於iPhone如何省電的文章不少.可是基本沒有講原理.
而在生活中,不少人在使用iPhone中有着明顯的錯誤的省電習慣.web

本文從iOS開發者的角度,對iOS的各項功能和技術進行說明,得出合理的省電技巧,以供你們參考.緩存

若是你對省電原理沒有興趣,請直接到文章最後,查看如何省電的方法.微信

哪些功能(硬件)是耗電大戶

網絡下載

wifi和4G都是耗電大戶,可是要知道手機上的網絡模塊並非一直在高速工做狀態.通常認爲下載時耗電多,若是不是處於下載狀態,耗電較少. 同時網絡下載時也會伴隨磁盤操做,高速讀寫也較耗電. iOS系統對硬件優化較好,當app退到後臺,屏幕熄滅後,網絡模塊幾乎不耗電.網絡

定位

iOS上的定位與安卓不一樣,綜合包含:GPS,wifi輔助定位,藍牙輔助定位.不能像安卓同樣,單獨關閉GPS,而後仍然能夠用基站和wifi來粗略定位.
iOS系統會根據外部環境和app的定位請求精度,來綜合使用多種定位手段.通常來講,打開wifi和藍牙,能夠有效加速定位,從而達到省電的目的.app

定位精度對耗電影響極大:app能夠指定定位的精度,從幾千米到幾十米,還有專門爲導航準備的最高精度.隨着app指定精度的提升,系統返回給app的位置精度和頻率都會提升,耗電也會大幅增長.框架

拍照錄像

拍照錄像須要用到:相機捕捉畫面+CPU/GPU處理數據+屏幕顯示畫面+磁盤讀寫,所以是很耗電的操做.尤爲是當前新系統提供高清/高速視頻錄製功能,更是耗電大戶.
更須要注意的是,如今不少美顏相機優化很差,大量特效的圖像處理任務放在CPU執行,耗電嚴重.優化

視頻播放

和拍照錄像相比,視頻播放用到的硬件也很多,尤爲是在線觀看視頻時:網絡下載+CPU/GPU處理數據+屏幕顯示畫面+磁盤讀寫,也比較耗電.動畫

如今視頻播放方面技術較爲成熟,大部分狀況下app能夠直接使用iOS自帶的視頻框架,即使使用開源組件自定義播放器,大部分也可使用GPU加速解碼播放. 若是發現某個播放器在播放時發熱嚴重,多是由於使用了CPU編解碼,建議更換其餘軟件.人工智能

屏幕高亮

在強光下使用手機,屏幕會自動變亮, 除此以外,在拍照錄像和展現二維碼時,也會有屏幕高亮狀況,耗電會有所增長.設計

複雜動畫

有些複雜動畫,可能會有大量的計算,有些可能會截屏並獲取截圖上的內容,有些可能會繪製生成大量圖像.若是不加優化,會比較耗電.

可是通常狀況下,app中不會有過多的動畫,也不會過於複雜,iOS上對於大部分常見動畫支持很好,耗電極少.

藍牙

藍牙能夠大概分爲:傳統藍牙和低功耗藍牙(BLE).
藍牙音箱,藍牙耳機,藍牙助聽器等用的是傳統藍牙,耗電相對較多;而手環,手錶等使用的是低功耗藍牙,耗電量極少.

怎麼判斷呢?由於iOS上,傳統藍牙是不容許開發者操做的,使用藍牙音箱時,咱們只須要進入系統設置界面--搜索鏈接就可使用了;而那些使用app來配對鏈接並能夠用app控制的,就是BLE,開發者可使用CoreBluetooth框架來控制低功耗藍牙的.

通常來講,無論是傳統藍牙,仍是低功耗藍牙,相比其它硬件來講耗電並不大,尤爲是低功耗藍牙,能夠認爲幾乎不耗電.

AR/3D遊戲

AR和3D涉及大量計算和圖形顯示任務,並且還頗有可能須要網絡支持,時刻保持鏈接,還有磁盤讀寫,耗電量極大.

蘋果對此的規定和限制

iOS11開始,在上拉界面的快捷菜單中關閉藍牙和wifi時,並非真正的關閉,只是斷開了鏈接而已,而且會在第二天早上6點自動打開.而蘋果自家的apple watch和iPad配套的筆並不會斷開鏈接,AirDrop(隔空投送)也能夠繼續使用.基於藍牙和wifi的輔助定位也可使用.

若是想真正關閉,要進入設置中,關閉藍牙和wifi,纔是真正的關閉,芯片段電,系統藍牙和wifi緩存清理.

蘋果之因此這樣設計,正是由於對系統掌握能力強,優化到位.所以推薦你們,平時不要關閉藍牙和wifi,根本省不了多少電,反而在定位時增長了耗電.

前臺機制

按照蘋果的要求,一個app在完成相應操做後,應該及時釋放或中止對硬件或系統功能的控制.好比,一個app(好比:餓了麼)須要根據不一樣城市顯示不一樣首頁內容,那麼應該在獲取到手機的當前城市後,主動中止定位.

同時,蘋果還建議:

  • 若是一項操做不肯定何時須要,則儘可能考慮延後執行或者省去;
  • 能使用單次定位,就不要使用持續定位(極其耗電).拿到知足要求的數據後當即中止;
  • 儘可能避免使用定時器不斷更新數據,而要在用戶操做時或先後臺切換時再刷新數據;若是必需要使用定時器,儘可能使用長間隔,並設定暫停條件;
  • 多使用緩存機制,出錯時重試次數應設置限制;

後臺機制

iOS系統的後臺共有三種:

  • Background Tasks(後臺任務):APP 在前臺時啓動某項任務,而後在未結束以前忽然切換到了後臺,那麼 APP 能夠在切換回調裏使用某些 API 來繼續向系統請求一些時間來繼續完成這個任務;完成以後通知系統,以後系統會將 APP 掛起;
  • Downloading(下載):在後臺啓動從網絡下載文件的任務 – 對於文件下載,iOS 有專門的機制;
  • Specific Backgournd Tasks(特殊後臺任務):應用須要在後臺一直執行代碼,長時間運行;

先說第一種後臺任務,其實就是一個app剛退到後臺時,能夠向系統申請一段時間(通常幾十秒)來處理一些任務,等任務處理完成再被系統掛起.好比一個地圖軟件,下載離線地圖後,正在安裝,用戶此時按了Home鍵,那就能夠向系統申請一段時間等安裝完成後,再掛起.若是耗時超過系統限制,會被強制清理.

第二種後臺下載,必須使用 iOS 指定的機制才能夠,那就是 NSURLSession來建立後臺下載.即便你的app已經進入後臺,或被系統殺掉了,當下載完成時,系統會喚醒app來處理下載好的文件.不少雜誌類應用會有這種功能.

第三種特殊後臺狀況就比較多了:

  • 須要在後臺播放音頻 – 如音樂播放;會一直運行

  • 須要在後臺錄音;會一直運行

  • 在後臺時也須要不斷通知用戶位置變更的; 好比導航app會一直後臺運行, 但地理圍欄app只會在進入和退出指定位置時喚醒app;

  • 支持 VoIP 電話的 – 如 skype 網絡電話;會在有電話時被系統喚醒

  • 須要在後臺有規律的下載和處理網絡內容的;會在指定時間或網絡條件下被系統喚醒

  • 在後臺有規律的從其餘外設(第三方配件)獲取並更新數據的;會在收到配件消息時被系統喚醒

後臺喚醒注意事項

還須要注意的是,那些被系統後臺喚醒的app並非無限制的,大部分狀況下被喚醒後只有10秒時間來處理任務,超時未完成處理會被系統強制掛起.

iOS爲了控制後臺任務,使用了AI技術,依靠人工智能來判斷一個app應不該該被喚醒,喚醒頻率是多少.已經不是你的app想要喚醒就能喚醒的了,若是手機電量不足或者被喚醒後你的app沒有聯網存取一些數據,或者老是超時被強制結束,那就不會再被喚醒.

還須要注意的是, 絕大多數狀況下,系統不會重啓被用戶手動強制關閉的 APP,但在 iOS 8 以後, location apps (地理圍欄等)是個例外。其餘的全部被用戶手動強制關閉的APP 都不會被系統主動喚起,直到用戶再次主動啓動這個 APP,或者手機重啓並在用戶輸入瞭解鎖密碼以後纔會恢復機制。

上架審覈

蘋果對後臺功能要求很嚴格,要求開發能不用後臺就不要用.

若是必定要用後臺功能,須要給出說明和解釋,讓審覈人員清楚地知道,app的哪一個功能用到了後臺模式.尤爲是後臺定位功能,由於涉及用戶隱私,審覈很是嚴格.

經常使用軟件是怎麼作的

絕大部分軟件是遵照蘋果開發規範的,可是仍是有一些app因爲設計不良或出現bug,致使耗電量很大:

  • 常見的是在進入後臺時,或在前臺但屏幕熄滅時,未能及時中止某些耗電操做(好比下載和定位),致使耗電.
  • app爲了追求動態化使用了大量web技術,也會致使耗電增大.好比淘寶app,就有明顯的運行卡頓,耗電過多的狀況.
  • 後臺存取(後臺應用刷新)過於頻繁,耗電增大.
    好比在系統設置界面,能夠看到微信有個後臺應用刷新開關,若是打開這個開關,那麼微信在收到新消息推送後,在後臺就能夠更新消息,直接打開微信就能看到了;若是關閉這個開關,收到新消息後,能夠在推送欄看到消息,但打開微信後還須要聯網從新下載完整消息.

另外還有一些軟件,故意鑽空子,利用技術手段做弊,強行運行在後臺,達到某些目的.尤爲在iOS10以前的系統上很常見.

後臺做弊

  • 因爲iOS後臺機制的限制,之前要想在後臺運行,能夠申請後臺權限後,模仿音樂播放器,在後臺循環播放一段無聲的音樂,這樣就能夠一直運行在後臺,直到內存不足被系統殺死.
  • 利用後臺存取(後臺應用刷新)功能,正常狀況下,聲明瞭這個類型以後,系統在你的 APP 進入後臺後,間隔性的給機會將你的 APP 喚醒,喚醒後再經過beginBackgroundTaskWithExpirationHandler:向系統申請一段時間,而後再重複申請一段時間,就能夠長時間在後臺運行.並且被殺死後還有可能被系統從新喚醒.

可是,如今iOS10和iOS11以後,這些方法也很難騙過審覈人員和iOS系統的後臺喚醒機制了.

普通用戶該怎麼省電

前面講了不少,都是做爲開發者在長期開發中總結的經驗,還有閱讀蘋果相關文檔獲得的知識.

但對於普通用戶來講,到底該怎麼省電呢? 我根據上面的原理,結合本身使用iOS系統的經驗,總結了下面幾條:

常常查看耗電狀況

在手機的設置—電池,頁面中,能夠看到過去24小時和過去7天的電池消耗狀況,點擊右側的時鐘按鈕,還能夠更詳細的顯示各個app的前臺運行時間和後臺運行時間.

對於某些後臺運行時間明顯異常的應用,應該嘗試關閉權限或直接殺死,以免在後臺長時間運行耗電.

好比我就遇到過,某個手環app在一次更新後,定位功能未及時關閉,一直在後臺運行並不判定位,一夜耗電70%.經過改變定位權限來限制後臺耗電.

關閉沒必要要權限

這裏的權限主要指三個:一個是定位權限,能只給使用時定位權限,就儘可能不給始終定位權限,固然,對於導航應用來講,若是不給始終定位權限的話,就沒法在後臺語音導航了;

另外一個是後臺應用刷新,這個權限不會提示,須要本身在應用安裝後手動關閉.對於微信之類的經常使用app能夠保留,不經常使用的建議關閉.關閉這個權限並不影響收取通知.

還有一個是通知的權限,有通知就會反覆喚醒手機,當app同時有後臺應用刷新權限時,還有可能被通知喚醒,在後臺啓動.

下降屏幕亮度

適當下降屏幕亮度能夠省電,這個彷佛沒有什麼須要解釋的.

禁用擡起喚醒等系統功能

仍是在設置—電池,頁面中,能夠禁用這個功能,這樣手機就不會由於隨便翻動手機而亮屏了,須要點亮屏幕時能夠手動按Home鍵點亮.但對於iPhoneX就不適用了.還能夠縮短屏幕鎖定的時間,好比改成30秒.

還能夠根據本身的須要,禁用系統更新,iCloud同步,siri喚醒等.

但若是你不想永久禁用這些功能,只想在外出旅途中儘量節省電量,那能夠啓用低電量模式.

啓用低電量模式

iPhone默認在電量只有20%時進入低電量模式,可是咱們也能夠手動進入低電量模式來延長續航.

進入低電量模式後:
屏幕鎖定時間強制改成30秒;
屏幕亮度稍微下降;
應用後臺喚醒頻率大大下降;
網絡和藍牙模塊掃瞄頻率,鏈接速度等都會下降;
CPU運行頻率下降;
系統動畫效果減弱;
定位頻率下降;
自動禁用軟件更新和iCloud同步;
禁用siri語音喚醒...

一套組合拳下來,省電效果十分突出.適用於忽然須要外出一成天,卻沒有帶充電寶的狀況.

慎重使用殺進程

前面說到,手動殺死進程後,通常狀況下系統不會再喚醒了,因此殺死一些應用能夠省電.

可是有些應用是須要常常啓動的,好比微信,一天可能須要看上百次,若是反覆殺死上百次,再反覆從新啓動上百次,耗電只會更多.

慎重關閉藍牙和wifi

正常狀況下,在待機時,藍牙和wifi耗電極少,但在定位時卻能夠有效加速定位.極端狀況下須要省電,也應該使用低電量模式,這樣省電最明顯.除非肯定本身不須要藍牙和wifi功能,也不須要使用定位功能(也沒有應用在後臺定位或使用地理圍欄),那麼再考慮關閉.

總結

在明白了iOS系統的前臺後臺原理後,咱們就能夠知道,在平時生活中,咱們只須要常常查看耗電狀況關閉沒必要要權限這兩招,就能夠很好的控制iOS的耗電狀況.

必要時再加上啓用低電量模式,並儘量少使用那些重度依賴網絡,定位,相機,視頻功能的app就能夠了.

若是還不能知足你的要求,只能隨身帶充電寶或者等之後蘋果更新大容量電池的iPhone了.

相關文章
相關標籤/搜索