Как следить за ходом воспроизведения MPMoviePlayerController, не убивая батарею?

У меня есть приложение медиаплеера, которое воспроизводит музыку с помощью MPMoviePlayerController. Мне нужно обновить пользовательский интерфейс в зависимости от позиции воспроизведения. Насколько я могу судить, нет никакого способа активно получать эту информацию от игрока с обратным вызовом или чем-то еще, и мне в основном нужно опросить ее самому.

Поэтому я решил использовать для этого простой таймер, запускаемый каждую секунду. Код такой:

Где-то в установочном коде:

[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            
    }

}

Таймер запускается каждую секунду, даже когда приложение в фоне. Метод сначала проверяет, активно ли приложение и играет ли проигрыватель, а затем выполняет некоторое обновление пользовательского интерфейса.

Есть ли какой-либо смысл в продолжительности работы батареи при запуске таймера каждую секунду таким образом? Должен ли я быть более усердным и попытаться снести таймер при входе в фон и повторно активировать его при активации приложения? Я уверен, что есть некоторый эффект времени автономной работы, но реально, насколько это серьезно? Или есть другие рекомендуемые способы сделать что-то подобное?

6
задан Jaanus 4 June 2012 в 06:45
поделиться