电量优化
问题
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:线上收集用户设备的能耗数据