哪个更可取:Rx Subject还是Android BroadcastReceiver



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

当我点击播放/暂停按钮时,我会向播放/暂停ExoPlayer:发送广播

public void playPauseClick(View view) {
isPlaying = !isPlaying;
Intent intent = new Intent(STR_RECEIVER_SERVICE);
intent.putExtra(IS_PLAYING, isPlaying);
sendBroadcast(intent);
}

这是我的BroadcastReceiver,它在我的Android服务中注册:

private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
boolean isPlaying = intent.getBooleanExtra(IS_PLAYING, false);
mExoPlayer.setPlayWhenReady(isPlaying);
}
};

另一种方法是使用处方主题。所以在我的活动中,我使用onNext((来播放/暂停ExoPlayer:

public void playPauseClick(View view) {
isPlaying = !isPlaying;
PLAYING_SUBJECT.onNext(isPlaying);
}

在服务中,我有以下一次性的,我在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都按预期工作,但在你看来,哪一个比另一个更可取,为什么在我的情况下?

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

您是否使用RxJava或其他进程中的东西(Kotlin的SharedFlowLiveData等(取决于您。但是,请不要将系统广播用于进程中的通信。

最新更新