Swift音乐播放应用如何通过trackTimeMillis降低服务器请求频率
Swift「正在播放」应用请求频率优化实现
核心实现步骤
你需要先存储iTunes API返回结果时计算的歌曲预计过期时间,不要每次判断时临时计算当前时间加时长,避免逻辑错误:
- 先声明存储属性,用来记录当前歌曲的预计播放结束时间:
// 可放在对应的业务类中作为存储属性 private var trackExpireDate: Date?
- 当iTunes API返回有效trackTimeMillis参数时,提前计算并存储过期时间:
// trackTimeMillis为接口返回的毫秒级歌曲时长 if let trackTimeMillis = 接口返回的trackTimeMillis可选值 { let trackDuration = TimeInterval(trackTimeMillis) / 1000 // 可根据需求额外增加1-5秒的缓冲时间,避免播放进度误差 trackExpireDate = Date().addingTimeInterval(trackDuration) }
- 发起请求前做时间判断,仅当当前时间超过过期时间时才执行请求:
var allowRequest = true if let expireDate = trackExpireDate, Date() < expireDate { // 未到过期时间,跳过请求 allowRequest = false } if allowRequest { // 此处编写你的服务器请求、iTunes API调用逻辑 }
原代码错误说明
你之前的代码存在几个明显问题:
- 时间差计算仅取小时单位,完全不适配歌曲通常数分钟的时长场景
- 语法结构错误,括号、参数逻辑均不匹配
- 未存储提前计算的过期时间点,每次判断都使用全新的Date()计算,逻辑完全不成立
可选优化
如果存在用户手动切歌的场景,可以额外监听系统播放状态变更事件,切歌时直接重置trackExpireDate为nil,强制触发下一次请求,避免切歌后无法及时同步最新歌曲信息。
内容的提问来源于stack exchange,提问作者Russell Harrower
相关产品推荐
相关产品推荐

