性能
耗电是后台还在干活
定位、轮询、动画和常亮屏幕,比一次重的启动更容易把电吃掉。
用户抱怨费电时,先看 App 退到后台之后还在做什么。前台一次重计算通常有头有尾。后台每 30 秒醒一次,整晚会比那次计算贵得多。
先停掉不需要的源
- 定位用完就把 manager 停掉。导航才需要持续更新,设置页不需要。
- 轮询改成推送,或者拉长间隔。页面不可见时暂停。
- CADisplayLink 和视频不在屏幕上就要 pause。滚出屏幕的 cell 里还在播,是常见的电量漏洞。
- 不要为了“体验”把 idleTimerDisabled 一直开着。只在用户明确在看长内容时临时关闭,离开就恢复。
后台任务用 BGTask 声明你要做什么、最晚何时做完。不要用后台定位或音频模式去换取“一直活着”。审核和耗电都会出问题,系统也会把你挂起。
怎么看
Energy Log 和 MetricKit 的动画、定位、网络三项就够开始。先对上用户路径:是看视频、是挂在前台不动,还是切走之后仍在转。对不上路径的优化,电量数字不会动。
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
displayLink?.isPaused = true
locationManager.stopUpdatingLocation()
}
出现和消失要成对。只在 viewDidLoad 里开始、从不停止,这个页面每进一次就多一个源。