[Android] Limit excessive publishstate calls

Geoffrey Métais git at videolan.org
Fri Apr 13 15:21:19 CEST 2018


vlc-android | branch: 3.0.x | Geoffrey Métais <geoffrey.metais at gmail.com> | Fri Apr 13 15:10:23 2018 +0200| [ac0456f445082739874b3261f0504acad84f6386] | committer: Geoffrey Métais

Limit excessive publishstate calls

(cherry picked from commit 61ad7bd04a1302bd9cbee6677054847d286b862a)

> https://code.videolan.org/videolan/vlc-android/commit/ac0456f445082739874b3261f0504acad84f6386
---

 .../src/org/videolan/vlc/PlaybackService.java      | 23 +++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/vlc-android/src/org/videolan/vlc/PlaybackService.java b/vlc-android/src/org/videolan/vlc/PlaybackService.java
index 87cba3c81..ea5893e44 100644
--- a/vlc-android/src/org/videolan/vlc/PlaybackService.java
+++ b/vlc-android/src/org/videolan/vlc/PlaybackService.java
@@ -114,6 +114,7 @@ public class PlaybackService extends MediaBrowserServiceCompat{
     private static final int SHOW_PROGRESS = 0;
     private static final int SHOW_TOAST = 1;
     private static final int END_MEDIASESSION = 2;
+    private static final int PUBLISH_STATE = 3;
 
     private static final long DELAY_DOUBLE_CLICK = 800L;
     private static final long DELAY_LONG_CLICK = 1000L;
@@ -551,7 +552,7 @@ public class PlaybackService extends MediaBrowserServiceCompat{
                     break;
                 case MediaPlayer.Event.PositionChanged:
                     updateWidgetPosition(event.getPositionChanged());
-                    publishState();
+                    mHandler.sendEmptyMessage(PUBLISH_STATE);
                     break;
                 case MediaPlayer.Event.Vout:
                     break;
@@ -616,6 +617,8 @@ public class PlaybackService extends MediaBrowserServiceCompat{
     private final Handler mHandler = new PlaybackServiceHandler(this);
 
     private static class PlaybackServiceHandler extends WeakHandler<PlaybackService> {
+        private long lastPublicationDate = 0L;
+
         PlaybackServiceHandler(PlaybackService fragment) {
             super(fragment);
         }
@@ -643,6 +646,13 @@ public class PlaybackService extends MediaBrowserServiceCompat{
                 case END_MEDIASESSION:
                     if (service.mMediaSession != null) service.mMediaSession.setActive(false);
                     break;
+                case PUBLISH_STATE:
+                    final long time = System.currentTimeMillis();
+                    if (time - lastPublicationDate > 1000L) {
+                        service.publishState();
+                        lastPublicationDate = time;
+                    }
+                    break;
             }
         }
     }
@@ -1082,15 +1092,18 @@ public class PlaybackService extends MediaBrowserServiceCompat{
         pscb.addCustomAction("repeat", getString(R.string.repeat_title), repeatResId);
 
         boolean mediaIsActive = state != PlaybackStateCompat.STATE_STOPPED;
+        boolean update = mMediaSession.isActive() != mediaIsActive;
 
         mMediaSession.setPlaybackState(pscb.build());
         mMediaSession.setActive(mediaIsActive);
         mMediaSession.setQueueTitle(getString(R.string.music_now_playing));
 
-        if (mediaIsActive)
-            sendStartSessionIdIntent();
-        else
-            sendStopSessionIdIntent();
+        if (update) {
+            if (mediaIsActive)
+                sendStartSessionIdIntent();
+            else
+                sendStopSessionIdIntent();
+        }
     }
 
     private void notifyTrackChanged() {



More information about the Android mailing list