跳到主要内容

电量优化

问题

iOS App 有哪些常见的耗电场景?如何优化?

答案

耗电大户

来源影响优化
定位极高按需精度、significantLocationChange
网络请求批量请求、避免轮询
后台刷新BGTaskScheduler
CPU 密集后台线程、算法优化
动画不可见时暂停
蓝牙/传感器用完关闭

定位优化

let manager = CLLocationManager()

// ❌ 高精度持续定位
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.startUpdatingLocation()

// ✅ 按需选择精度
manager.desiredAccuracy = kCLLocationAccuracyHundredMeters
manager.distanceFilter = 100 // 移动 100m 才回调

// ✅ 仅需大致位置变化
manager.startMonitoringSignificantLocationChanges()

后台任务

import BackgroundTasks

// 注册后台任务
BGTaskScheduler.shared.register(
forTaskWithIdentifier: "com.app.refresh",
using: nil
) { task in
handleRefresh(task: task as! BGAppRefreshTask)
}

// 调度
func scheduleRefresh() {
let request = BGAppRefreshTaskRequest(identifier: "com.app.refresh")
request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)
}

常见面试问题

Q1: 如何检测 App 的电量消耗?

答案

  • Xcode Energy Gauge:调试时实时查看能耗等级
  • Instruments Energy Log:记录各子系统(CPU/网络/定位)的能耗
  • MetricKit:线上收集用户设备的能耗数据

相关链接