测试设备:iPhone 13mini / iOS 26
验证方法
- 开启
Audio, AirPlay, and Picture in Picture模式,播放声音 - 执行与声音无关的代码和网络请求逻辑,并写入日志文件,代码如下所示
- 让App进入后台,App持续播放声音,过一段时间(5分钟)回到App前台,检查日志文件中是否预期内容
swift
private func test() {
var sum = 0
timer?.invalidate()
timer = YYTimer(timeInterval: 1, repeats: true, block: { t in
sum += 1
// 验证代码执行
DDLogInfo("[BackgroundTest] Timer fired. Sum: \(sum)")
// 验证网络请求
let url = URL(string: "https://www.baidu.com")!
URLSession.shared.dataTask(with: url) { _, response, error in
if let error = error {
DDLogInfo("[BackgroundTest] Network failed: \(error.localizedDescription)")
} else if let httpResponse = response as? HTTPURLResponse {
DDLogInfo("[BackgroundTest] Network success. Status: \(httpResponse.statusCode)")
}
}.resume()
})
}
日志结果:
less
2025-11-27 10:23:13.575 [INFO] [BackgroundTest] Timer fired. Sum: 5
2025-11-27 10:23:13.612 [INFO] [BackgroundTest] Network success. Status: 200
2025-11-27 10:23:14.008 [INFO] Report OnlineStatus background, badge number 1 // 进入后台
2025-11-27 10:23:14.582 [INFO] [BackgroundTest] Timer fired. Sum: 6
2025-11-27 10:23:14.612 [INFO] [BackgroundTest] Network success. Status: 200
2025-11-27 10:23:15.586 [INFO] [BackgroundTest] Timer fired. Sum: 7
2025-11-27 10:23:15.622 [INFO] [BackgroundTest] Network success. Status: 200
.....//省略
2025-11-27 10:28:19.578 [INFO] [BackgroundTest] Timer fired. Sum: 311
2025-11-27 10:28:19.610 [INFO] [BackgroundTest] Network success. Status: 200
2025-11-27 10:28:20.579 [INFO] [BackgroundTest] Timer fired. Sum: 312
2025-11-27 10:28:20.611 [INFO] [BackgroundTest] Network success. Status: 200
2025-11-27 10:28:21.574 [INFO] [BackgroundTest] Timer fired. Sum: 313
2025-11-27 10:28:21.602 [INFO] [BackgroundTest] Network success. Status: 200
2025-11-27 10:28:22.449 [INFO] Report OnlineStatus foreground // 回到前台
2025-11-27 10:28:22.573 [INFO] [BackgroundTest] Timer fired. Sum: 314
2025-11-27 10:28:22.600 [INFO] [BackgroundTest] Network success. Status: 200
结论
- 开启
Audio, AirPlay, and Picture in Picture模式,开启声音,进入后台,可以正常执行与声音无关的代码逻辑和网络请求
注:仅为测试结果,不排除系统会做任何形式的拦截或中断