耗電優化最終目的:經過儘量下降CPU、GPU功耗來下降手機電量消耗。數據庫
(1)儘量少用定時器;緩存
(2)優化I/O操做(所謂的I/O操做也就是文件操做,咱們簡稱爲I/O操做。怎麼優化呢?儘可能不要頻繁寫入小數據,最好批量一次性寫入。讀寫大量主要的數據時,考慮用dispatch_io,其提供了基於GCD的異步操做文件I/O的API。用dispatch_io系統會優化磁盤訪問);網絡
(3)數據量比較大的,建議使用數據庫(SQlite、CoreData);app
影響耗電的幾個方面:異步
(1)Network :
網絡活動會喚起須要長時間週期性供電的無線電模組,能夠分批次進行網絡請求,來下降開銷.優化
(2)Location :
精密&高頻的的定位會增長開銷,須要按需使用.spa
(3)CPU :
CPU使用率超過20%就會快速耗乾電池電量.高效使用CPU,而且當用戶出現模糊輸入時快速作出不作事情的反應. code
(4)GPU :
圖形處理器(顯卡的處理器),亂使用GPU會致使交互差,而且下降電池壽命. blog
(5)Background :
後臺狀態App仍會消耗電量,App要按需執行後臺操做,並使用延遲APIs來保證系統運算高效執行.另外,在app進入後臺狀態是,當即減小動做,而且通知系統一次這些動做已經完成.rem
一、網絡優化
(1)網絡不可用,不要嘗試執行網絡請求;
func AlamofiremonitorNet() { let manager = NetworkReachabilityManager(host: "www.apple.com") manager?.listener = { status in print("網絡狀態: \(status)") if status == .reachable(.ethernetOrWiFi) { //WIFI print("wifi") } else if status == .reachable(.wwan) { // 蜂窩網絡 print("4G") } else if status == .notReachable { // 無網絡 print("無網絡") } else { // 其餘 } } manager?.startListening()//開始監聽網絡 }
(2)讓用戶能夠取消長時間運行或者速度很慢的網絡操做,設置合適的超時時間
var timeoutSessionManager1:Alamofire.SessionManager = { let configuration = URLSessionConfiguration.default //請求超時時間15秒 configuration.timeoutIntervalForRequest = 15 return Alamofire.SessionManager(configuration: configuration) }()
(3)若是屢次請求的結果相同,儘可能使用緩存。
(4)儘可能使用斷點續傳,不然網絡不穩定的時候可能屢次傳輸相同的內容。
二、定位優化
(1)若是不是導航的應用,儘可能不要實時更新位置,定位完畢就關掉定位服務;
(2)儘可能下降定位精度,好比儘可能不要使用精度最高的KCLLocationAccuracyBest;精度越高,硬件模塊功耗越大;
(3)對於用不到定位的,info.plist文件中不要有定位權限的相關字段。
以上就是筆者本身優化時候,修改的地方。