我有一个使用 MPMoviePlayerController 播放音乐的媒体播放器应用程序。我需要根据播放位置更新 UI。我能说的最好的,没有办法通过回调或其他方式主动从玩家那里接收这些信息,我基本上需要自己轮询。
所以我想我会使用一个简单的计时器,每秒运行一次。代码是这样的:
在设置代码中的某处:
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updatePlaybackProgressFromTimer:) userInfo:nil repeats:YES];
进而:
- (void) updatePlaybackProgressFromTimer:(NSTimer *)timer {
if (([UIApplication sharedApplication].applicationState == UIApplicationStateActive) && (player.playbackState == MPMoviePlaybackStatePlaying)) {
CGFloat progress = player.currentPlaybackTime / player.duration;
// do something useful with this info
}
}
计时器每秒运行一次,即使应用程序处于后台也是如此。该方法首先查看应用程序是否处于活动状态以及播放器是否正在播放,然后进行一些 UI 更新。
以这种方式每秒运行一个计时器对电池寿命有影响吗?我是否应该更加勤奋,在进入后台时尝试拆除计时器并在激活应用程序时重新激活它?我敢肯定会有一些电池寿命影响,但实际上,它有多严重?或者有没有其他推荐的方法来做这种事情?