【iOS】Instruments性能檢測之耗電優化

  耗電優化最終目的:經過儘量下降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文件中不要有定位權限的相關字段。

 

  以上就是筆者本身優化時候,修改的地方。

相關文章
相關標籤/搜索