我在 Github 中有以下项目:https ://github.com/alirezaeiii/ExoPlayer-Service我使用 Assets 中的 ExoPlayer 播放音乐。
当我点击播放/暂停按钮时,我向播放/暂停 ExoPlayer 发送广播:
public void playPauseClick(View view) {
isPlaying = !isPlaying;
Intent intent = new Intent(STR_RECEIVER_SERVICE);
intent.putExtra(IS_PLAYING, isPlaying);
sendBroadcast(intent);
}
这是我在我的 Android 服务中注册的 BroadcastReceiver :
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
boolean isPlaying = intent.getBooleanExtra(IS_PLAYING, false);
mExoPlayer.setPlayWhenReady(isPlaying);
}
};
另一种方法是使用 Rx-Subject。所以在我的活动中,我使用 onNext() 播放/暂停 ExoPlayer :
public void playPauseClick(View view) {
isPlaying = !isPlaying;
PLAYING_SUBJECT.onNext(isPlaying);
}
在服务中,我有以下 Disposable,我在 onDestroy() 中进行了处理:
public static final Subject<Boolean> PLAYING_SUBJECT = PublishSubject.create();
private final Disposable mPlayingDisposable = PLAYING_SUBJECT.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean isPlaying) {
mExoPlayer.setPlayWhenReady(isPlaying);
}
});
广播和 Rx-Subject 都按预期工作,但在您看来,哪一个比另一个更可取,为什么在我的情况下?