Minor performance improvement.

This commit is contained in:
Karim Abou Zeid 2016-04-04 00:09:08 +02:00
commit 2f75f9826e

View file

@ -141,7 +141,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
private HandlerThread musicPlayerHandlerThread; private HandlerThread musicPlayerHandlerThread;
private HandlerThread queueSaveHandlerThread; private HandlerThread queueSaveHandlerThread;
private SongPlayCountHelper songPlayCountHelper = new SongPlayCountHelper(); private SongPlayCountHelper songPlayCountHelper = new SongPlayCountHelper();
private ThrottledPublicPlayStateChangedNotifier throttledPublicPlayStateChangedNotifier; private ThrottledSeekHandler throttledSeekHandler;
private final BroadcastReceiver becomingNoisyReceiver = new BroadcastReceiver() { private final BroadcastReceiver becomingNoisyReceiver = new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, @NonNull Intent intent) { public void onReceive(Context context, @NonNull Intent intent) {
@ -191,7 +191,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
registerReceiver(widgetIntentReceiver, new IntentFilter(APP_WIDGET_UPDATE)); registerReceiver(widgetIntentReceiver, new IntentFilter(APP_WIDGET_UPDATE));
mediaStoreObserver = new MediaStoreObserver(playerHandler); mediaStoreObserver = new MediaStoreObserver(playerHandler);
throttledPublicPlayStateChangedNotifier = new ThrottledPublicPlayStateChangedNotifier(playerHandler); throttledSeekHandler = new ThrottledSeekHandler(playerHandler);
getContentResolver().registerContentObserver( getContentResolver().registerContentObserver(
MediaStore.Audio.Media.INTERNAL_CONTENT_URI, true, mediaStoreObserver); MediaStore.Audio.Media.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
getContentResolver().registerContentObserver( getContentResolver().registerContentObserver(
@ -848,8 +848,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
synchronized (this) { synchronized (this) {
try { try {
int newPosition = playback.seek(millis); int newPosition = playback.seek(millis);
savePositionInTrack(); throttledSeekHandler.notifySeek();
throttledPublicPlayStateChangedNotifier.scheduleIntent();
return newPosition; return newPosition;
} catch (Exception e) { } catch (Exception e) {
return -1; return -1;
@ -1203,23 +1202,24 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
} }
} }
private class ThrottledPublicPlayStateChangedNotifier implements Runnable { private class ThrottledSeekHandler implements Runnable {
// milliseconds to delay before calling refresh to aggregate events // milliseconds to throttle before calling run() to aggregate events
private static final long REFRESH_DELAY = 500; private static final long THROTTLE = 500;
private Handler mHandler; private Handler mHandler;
public ThrottledPublicPlayStateChangedNotifier(Handler handler) { public ThrottledSeekHandler(Handler handler) {
mHandler = handler; mHandler = handler;
} }
public void scheduleIntent() { public void notifySeek() {
mHandler.removeCallbacks(this); mHandler.removeCallbacks(this);
mHandler.postDelayed(this, REFRESH_DELAY); mHandler.postDelayed(this, THROTTLE);
} }
@Override @Override
public void run() { public void run() {
sendPublicIntent(PLAY_STATE_CHANGED); savePositionInTrack();
sendPublicIntent(PLAY_STATE_CHANGED); // for musixmatch synced lyrics
} }
} }