What is Energy?
Overhead:Bring Hardware Up、ハードウェアの起動消費電力(軽い処理も重い処理も同じ消費量)
電力消費の元
・CPU
・通信
・画面
・位置情報
省エネの原則
・Identify:必要なタイミングで必要なタスクを実行する
・Optimize:処理を最適化する
・Coalesce:タスクをまとめる
・Reduce:同じタスクを減らす
事例1:Feedを更新
改善前:Timerでデータを更新する
改善ポイント
・ユーザーインターアクションの時更新する
・Notificationが届いている時に更新する
・ネットワーク状態をチェックしてから更新する
// Setup NSURLSession Default Session
let config = URLSessionConfiguration.default()
// Use WaitsForConnectivity
config.waitsForConnectivity = true
・キャッシュを利用する
// NSURLSession Cache
let cachesDirectoryURL = FileManager.
default().urlsForDirectory(.cachesDirectory, inDomains: .userDomainMask).first!
let cacheURL = try! cachesDirectoryURL.appendingPathComponent("MyCache")
var diskPath = cacheURL.path
let cache = URLCache(memoryCapacity:16384, diskCapacity: 268435456, diskPath: diskPath)
config.urlCache = cache
config.requestCachePolicy = .useProtocolCachePolicy
事例2:写真をアップロード
改善前
改善ポイント
事例3:分析データをアップロード
NSURLSession Background Sessionを推奨
- 自動リトライ
- スループット監視
- Indicate system the best time to do your work
事例4:Location Best Practices
- 精度を把握する(必要以上の精度を求めないこと)
- なるべくcontinuous locationを利用しない(電力消費が激しいから)
- 使わない時にすぐ位置情報を止める
- Defer location updates(https://developer.apple.com/documentation/corelocation/cllocationmanager/1620547-allowdeferredlocationupdates)
事例5:画面処理
- UIが変化された時のみ画面を更新する
- 更新中の要素にぼかしをしないようにする
事例6:CPU
- 実行するタスクを明確する
- Do work quickly and efficiently
- タイマーをなるべく利用しない
- 余裕を持つ(どうしてもタイマーを利用する際に、間隔を長く設定する)
事例7:バックグラウンド処理
- Finish work quickly
- Use background app refresh
- Call completion handler(PushKit APIにcompletion handlerが追加された。)
消費電力のデバッグツール
Xcodeのデバッグツール
Energy ImpactがVery High(赤)以下の状態は理想です。
Time ProfileからメソッドのCPU使用状況を調べる
Scenarios for Energy Debugging
General/common
- Launch and Idle
- Background
Application specific (For example, Navigation App )
- Search for an address
- Get directions
- Navigate
まとめ
- NSURLSession Background Sessionを利用
- continuous locationの利用を控え
- Timerを利用しない
- タスクをまとめて実行する
- Use energy gauges(Xcodeのツール)
参考
https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/index.html#//apple_ref/doc/uid/TP40015243-CH3-SW1
https://devstreaming-cdn.apple.com/videos/wwdc/2017/238a3uic99uf9c6iw3/238/238_writing_energy_efficient_apps.pdf