代码之家  ›  专栏  ›  技术社区  ›  Tom11

服务时间测量

  •  1
  • Tom11  · 技术社区  · 4 年前

    我有一个服务,使用 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 ,但价值也很大。有人能告诉我,如何正确地测量听力时间,或者为我提供一些最佳实践吗?

    0 回复  |  直到 4 年前
        1
  •  0
  •   A. Kultala    3 年前

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