diff --git a/app/src/main/java/com/fongmi/android/tv/service/PlaybackService.java b/app/src/main/java/com/fongmi/android/tv/service/PlaybackService.java index c2add39e1..eca19df4d 100644 --- a/app/src/main/java/com/fongmi/android/tv/service/PlaybackService.java +++ b/app/src/main/java/com/fongmi/android/tv/service/PlaybackService.java @@ -141,6 +141,7 @@ public class PlaybackService extends MediaLibraryService implements MediaLibrary @Override public boolean onUnbind(Intent intent) { if (isExternalBind(intent)) releaseExternal(); + if (isLocalBind(intent)) tryShutdown(); return super.onUnbind(intent); } @@ -166,10 +167,20 @@ public class PlaybackService extends MediaLibraryService implements MediaLibrary super.onDestroy(); } + private void stopAndClear() { + player.stop(); + exoPlayer.clearMediaItems(); + } + + public void suspend() { + stopAndClear(); + removeForeground(); + } + public void shutdown() { if (!running) return; running = false; - player.stop(); + stopAndClear(); stopSelf(); } @@ -274,7 +285,7 @@ public class PlaybackService extends MediaLibraryService implements MediaLibrary public void dispatchStop() { if (exoPlayer.getPlaybackState() == Player.STATE_IDLE) return; if (hasNavigationCallback() && isNavigationOwner()) dispatch(NavigationCallback::onStop); - else player.stop(); + else stopAndClear(); } public void dispatchLoop() { diff --git a/app/src/main/java/com/fongmi/android/tv/ui/base/PlaybackActivity.java b/app/src/main/java/com/fongmi/android/tv/ui/base/PlaybackActivity.java index 825694069..661f41bb5 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/base/PlaybackActivity.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/base/PlaybackActivity.java @@ -36,6 +36,7 @@ public abstract class PlaybackActivity extends BaseActivity implements MediaCont private PlaybackService mService; private boolean audioOnly; private boolean redirect; + private boolean bound; private boolean stop; private boolean lock; @@ -160,6 +161,7 @@ public abstract class PlaybackActivity extends BaseActivity implements MediaCont startService(new Intent(this, PlaybackService.class)); bindService(new Intent(this, PlaybackService.class).setAction(PlaybackService.LOCAL_BIND_ACTION), this, BIND_AUTO_CREATE); buildControllerAsync(); + bound = true; } private void buildControllerAsync() { @@ -221,8 +223,12 @@ public abstract class PlaybackActivity extends BaseActivity implements MediaCont private void releaseService(boolean owner) { mService.removePlayerCallback(mPlayerCallback); if (owner) mService.setNavigationCallback(null, null); - if (mService.hasExternalClient() || mService.hasPlayerCallback()) mService.resetSessionActivity(); - else if (owner) mService.shutdown(); + if (mService.hasExternalClient() || mService.hasPlayerCallback()) { + if (owner) mService.suspend(); + mService.resetSessionActivity(); + } else if (owner) { + mService.shutdown(); + } } private void detach() { @@ -239,8 +245,9 @@ public abstract class PlaybackActivity extends BaseActivity implements MediaCont } private void releaseBinding() { - if (mService == null) return; - mService.removePlayerCallback(mPlayerCallback); + if (!bound) return; + bound = false; + if (mService != null) mService.removePlayerCallback(mPlayerCallback); unbindService(this); mService = null; } @@ -338,7 +345,7 @@ public abstract class PlaybackActivity extends BaseActivity implements MediaCont protected void onStop() { super.onStop(); if (isOwner()) detachSurface(); - if (Setting.isBackgroundOff() && isOwner() && mController != null) mController.pause(); + if (isOwner() && Setting.isBackgroundOff() && mController != null) mController.pause(); } @Override