我們在開發APP的每一個設計都要考慮性能因素,特別是電池和內存的消耗。一下介紹我們應該考慮到的因素。
減少電池消耗
移動設備的電池消耗一直是一個問題,在iOS通過關閉當前沒有使用的硬件來保存電量。我們可以優化一下的硬件:
- CPU
- WiFi 藍牙 移動網絡
- 位置定位
- 加速計
- 磁盤
可以通過一下的考慮來優化代碼: - 避免做輪詢工作,其會讓CPU一直工作。可以考慮NSRunLoop和NSTimer代理。
- 將idleTimerDisabled屬性設置為NO,這樣APP在沒有用戶輸入的時候就會關閉屏幕以節約電量。但有些應用(游戲)使用加速計即使沒有輸入的情況下,應該設置為Yes。
- 合并工作以最大化空閑時間,同時并發執行一串計算比串行計算更省電,因為周期性的執行一些小量的計算喚醒CPU更頻繁,且要進行跟多的狀態轉換。
- 避免頻繁的訪問磁盤。例如:只有當信息改變了才寫磁盤或者合并一些改變。
- 避免繪制界面快于實際需要,繪制界面是非常耗電的。
- UIAccelerometer 使用完后應該關閉且應該事件的發送頻率應該設置到所需的最小。
網絡傳遞的數據越多消耗的電量越多,這應該是主要消耗電量的地方。
有以下的 tips 來節約電量: - 只有需要的時候才訪問外部網,不要輪詢服務器。
- 當必需傳遞數據時,盡量傳遞有用的數據,不要傳遞被服務器簡單忽略的數據。可以使用數據壓縮減少數據量。
- 使用突發式傳遞數據。系統檢測到沒有網絡使用的時候會關閉 WiFi 或移動網絡,傳遞相同的數據在更長的時間將花費更多的電量。比如:使用NSURLSession 將多個上傳或下載任務排入隊列,而不是等一個結束后再啟動另外一個,系統自動管理隊列任務的執行是最有效的。
- WiFi 比移動網絡更省電。
- Core Location framework 的使用要注意到,位置更新不用就要關閉,設置距離過濾和精度到合適的值。
Instruments 這款 APP 包含了一些電池相關的信息,例如:電池消耗、WiFi、藍牙、GPS 、CPU 、顯示屏的相關數據。也可以使用設備上的電池診斷收集信息。