哪个更好: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 的 SharedFlow
、LiveData
等)取决于您。但是,请不要使用系统广播进行进程内通信。
我在 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 的 SharedFlow
、LiveData
等)取决于您。但是,请不要使用系统广播进行进程内通信。