LoginSignup
0
1

More than 5 years have passed since last update.

Writing Energy Efficient Apps

Last updated at Posted at 2017-07-21

What is Energy?

スクリーンショット 2017-07-19 17.14.54.png
Overhead:Bring Hardware Up、ハードウェアの起動消費電力(軽い処理も重い処理も同じ消費量)

電力消費の元

・CPU
・通信
・画面
・位置情報

省エネの原則

・Identify:必要なタイミングで必要なタスクを実行する
・Optimize:処理を最適化する
・Coalesce:タスクをまとめる
・Reduce:同じタスクを減らす

事例1:Feedを更新

改善前:Timerでデータを更新する

スクリーンショット 2017-07-19 17.51.12.png

改善ポイント

・ユーザーインターアクションの時更新する
・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

スクリーンショット 2017-07-19 17.54.31.png

事例2:写真をアップロード

改善前

  • 即時アップロード
  • エラーの時リトライ スクリーンショット 2017-07-20 10.42.22.png

改善ポイント

  • リトライ回数を減らす
  • まとめてアップロード
  • タイムアウトを適当に設定する
  • リトライの制限回数に至りましたら、Background Sessionを利用する スクリーンショット 2017-07-20 10.51.20.png

事例3:分析データをアップロード

NSURLSession Background Sessionを推奨

  • 自動リトライ
  • スループット監視
  • Indicate system the best time to do your work

事例4:Location Best Practices

事例5:画面処理

  • UIが変化された時のみ画面を更新する
  • 更新中の要素にぼかしをしないようにする

事例6:CPU

  • 実行するタスクを明確する
  • Do work quickly and efficiently
  • タイマーをなるべく利用しない
  • 余裕を持つ(どうしてもタイマーを利用する際に、間隔を長く設定する)

事例7:バックグラウンド処理

  • Finish work quickly
  • Use background app refresh
  • Call completion handler(PushKit APIにcompletion handlerが追加された。)

スクリーンショット 2017-07-20 12.08.33.png

スクリーンショット 2017-07-20 12.09.02.png

消費電力のデバッグツール

Xcodeのデバッグツール

スクリーンショット 2017-07-20 12.21.19.jpg
Energy ImpactがVery High(赤)以下の状態は理想です。

さらにInstrumentsに連携も可能
スクリーンショット 2017-07-20 12.20.10.jpg

Time ProfileからメソッドのCPU使用状況を調べる
スクリーンショット 2017-07-21 10.59.16.png

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1