耗電優化最終目的:通過儘可能降低CPU、GPU功耗來降低手機電量消耗。 (1)儘可能少用定時器; (2)優化I/O操作(所謂的I/O操作也就是文件操作,我們簡稱為I/O操作。怎麼優化呢?儘量不要頻繁寫入小數據,最好批量一次性寫入。讀寫大量主要的數據時,考慮用dispatch_io,其提供了基於GCD ...
耗電優化最終目的:通過儘可能降低CPU、GPU功耗來降低手機電量消耗。
(1)儘可能少用定時器;
(2)優化I/O操作(所謂的I/O操作也就是文件操作,我們簡稱為I/O操作。怎麼優化呢?儘量不要頻繁寫入小數據,最好批量一次性寫入。讀寫大量主要的數據時,考慮用dispatch_io,其提供了基於GCD的非同步操作文件I/O的API。用dispatch_io系統會優化磁碟訪問);
(3)數據量比較大的,建議使用資料庫(SQlite、CoreData);
影響耗電的幾個方面:
(1)Network :
網路活動會喚起需要長時間周期性供電的無線電模組,可以分批次進行網路請求,來降低開銷.
(2)Location :
精密&高頻的的定位會增加開銷,需要按需使用.
(3)CPU :
CPU使用率超過20%就會快速耗乾電池電量.高效使用CPU,並且當用戶出現模糊輸入時快速做出不做事情的反應.
(4)GPU :
圖形處理器(顯卡的處理器),亂使用GPU會導致交互差,並且降低電池壽命.
(5)Background :
後臺狀態App仍會消耗電量,App要按需執行後臺操作,並使用延遲APIs來保證系統運算高效執行.另外,在app進入後臺狀態是,立即減少動作,並且通知系統一次這些動作已經完成.
1、網路優化
(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)儘量使用斷點續傳,否則網路不穩定的時候可能多次傳輸相同的內容。
2、定位優化
(1)如果不是導航的應用,儘量不要實時更新位置,定位完畢就關掉定位服務;
(2)儘量降低定位精度,比如儘量不要使用精度最高的KCLLocationAccuracyBest;精度越高,硬體模塊功耗越大;
(3)對於用不到定位的,info.plist文件中不要有定位許可權的相關欄位。
以上就是筆者自己優化時候,修改的地方。