哪一个更好:Rx主题还是Android广播接收器
我在Github中有以下项目:在那里我使用来自资产的ExoPlayer播放音乐 当我点击播放/暂停按钮时,我向播放/暂停播放器发送广播:哪一个更好:Rx主题还是Android广播接收器,android,broadcastreceiver,rx-java2,subject-observer,Android,Broadcastreceiver,Rx Java2,Subject Observer,我在Github中有以下项目:在那里我使用来自资产的ExoPlayer播放音乐 当我点击播放/暂停按钮时,我向播放/暂停播放器发送广播: public void playPauseClick(View view) { isPlaying = !isPlaying; Intent intent = new Intent(STR_RECEIVER_SERVICE); intent.putExtra(IS_PLAYING, isPlaying);
public void playPauseClick(View view) {
isPlaying = !isPlaying;
Intent intent = new Intent(STR_RECEIVER_SERVICE);
intent.putExtra(IS_PLAYING, isPlaying);
sendBroadcast(intent);
}
public void playPauseClick(View view) {
isPlaying = !isPlaying;
PLAYING_SUBJECT.onNext(isPlaying);
}
这是我在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主题。因此,在我的活动中,我使用onNext()播放/暂停ExoPlayer:
public void playPauseClick(View view) {
isPlaying = !isPlaying;
Intent intent = new Intent(STR_RECEIVER_SERVICE);
intent.putExtra(IS_PLAYING, isPlaying);
sendBroadcast(intent);
}
public void playPauseClick(View view) {
isPlaying = !isPlaying;
PLAYING_SUBJECT.onNext(isPlaying);
}
在服务中,我有以下一次性的,我在onDestroy()中处理:
public static final Subject PLAYING_Subject=PublishSubject.create();
private final Dispossible Emplaying Dispossible=PLAYING_SUBJECT.subscribe(新消费者(){
@凌驾
公共无效接受(布尔值显示){
mExoPlayer.setPlayWhenReady(iPlay);
}
});
广播和接收主题均按预期工作,但从您的角度来看,哪一个更适合另一个,以及为什么在我的情况下?切勿使用IPC(进程间通信)在您自己的进程内进行通信。这不仅浪费了资源,还带来了安全问题。例如,任何应用程序都可以向您发送该广播
是否使用RxJava或其他正在进行的操作(Kotlin的
SharedFlow
,LiveData
,等等)取决于您。但是,请不要将系统广播用于进程内通信。谢谢您让我知道浪费资源的情况,但关于安全性,我们可以在清单中设置android:exported=“false”,因此其他应用程序无法发送该广播。你同意吗?@Ali:“你同意吗?”——那么你的接收者将无法访问mExoPlayer
,除非你正在做一些可怕的事情(例如,使mExoPlayer
成为静态的)。我假设此接收器是通过在上下文中调用的registerReceiver()
注册的,并且在该场景中没有与android:exported=“false”
等效的。您是对的,它是通过registerReceiver()注册的。谢谢你的帮助。