服务时间测量

问题描述

我有一项服务,它使用 MediaSession 来播放流。我想收集时间,这个服务播放多少音乐,然后将其发送到服务器。我使用以下代码(简化):

public class MyService extends MediaBrowserServiceCompat {

  private Long startTime;

  public class MediaPlayerListener extends PlaybackInfoListener {

    @Override
    public void onPlaybackStateChange(PlaybackStateCompat state) {
       session.setPlaybackState(state);

       switch (state.getState()) {
           case PlaybackStateCompat.STATE_PLAYING:
               startTime = SystemClock.elapsedRealtime();
               startForeground(MediaNotificationManager.NOTIFICATION_ID,notification);
               break;
           case PlaybackStateCompat.STATE_STOPPED:
               long timediff = SystemClock.elapsedRealtime() - startTime;
               stopForeground(true);
               stopSelf();
               // timediff is being sent to the server here 
               break;
       }
   }
}

服务按预期工作,但时间报告没有。在服务器上,有的听的时间还可以,但有的真的很大,200多个小时。由于此服务用于收听流,因此计算此类值是不可能或不现实的。因此,我确信这种报道是不好的。我也尝试将 SystemClock 替换为 System#currentTimeMillis,但值也非常大。有人可以告诉我,如何正确衡量收听时间或为我提供一些最佳实践吗?

解决方法

在调用 stopSelf() 之前尝试向服务器发送时差。 有时它可能没有足够的时间发送它。 stopSelf() 尽快停止服务。另一个处理发送时差的服务?

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...