哪个更好:Rx-Subject 或 Android BroadcastReceiver

Which one is preferable : Rx-Subject or Android BroadcastReceiver

我在 Github 中有以下项目:https://github.com/alirezaeiii/ExoPlayer-Service 我使用 Assets 中的 ExoPlayer 播放音乐。

当我点击 Play/Pause 按钮时,我向 Play/Pause 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。所以在我的 Activity 中,我使用 onNext() 来 Play/pause 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);
        }
    });

broadcast 和 Rx-Subject 都按预期工作,但在您看来哪个更好,为什么对我而言?

切勿使用 IPC(进程间通信)在您自己的进程内进行通信。它不仅浪费资源,而且还引入了安全问题。例如,任何应用程序 都可以向您发送该广播。

是否使用 RxJava 或正在开发的其他工具(Kotlin 的 SharedFlowLiveData 等)取决于您。但是,请不要使用系统广播进行进程内通信。