android - Android 架构组件:LiveData as Service 观察者
问题描述
这是一个我是否正确地做这个问题。
我有一个 MediaPlayer 服务来播放音频。由于要求很少,它是一个回调地狱,有太多的听众。
例如:目前,我有一个音频路由按钮,用于在听筒和扬声器之间切换音频路由。我目前使用绑定服务并从我的 UI 对服务调用 reRouteAudio() 方法并监听结果回调,以便我可以更改路由按钮上的图标和操作。
为了测试它是否会更干净,我将上面的流程更改为 LiveData 实现。
我创建了一个名为 PlayerServiceLiveData 的单例和以下方法
public void updateAudioRoute(AudioRoute audioRoute) {
this.audioRoute.postValue(audioRoute);
}
public LiveData<AudioRoute> getAudioRoute() {
return audioRoute;
}
我在我的活动中观察到这一点
PlayerServiceLiveData.getInstance().getAudioRoute().observe(this, new Observer<AudioRoute>() {
@Override
public void onChanged(AudioRoute audioRoute) {
if (App.DEBUG) {
AppHelper.Log(TAG, "AudioRoute updated to: " + audioRoute);
}
}
});
从服务更新它
PlayerServiceLiveData.getInstance().updateAudioRoute(currentAudioRoute);
它似乎工作正常,看起来更干净。
所以,我的问题是:这是一种好的/健康的方式吗?我是否认为这是正确的选择,因为谷歌也弃用 LocalBroadcastManager
解决方案
推荐阅读
- ethereum - 以太坊智能合约在 Kovan 上部署良好,在主网上失败。煤气太低了还是什么?
- sql-server - sdf_persist 在 sparklyr 上花费了很长时间
- angular - 将附加数据附加到角度组件
- math - 在three.js中围绕一个特殊点旋转文本几何
- ssh - 如何通过 ssh 传递带引号的参数
- mysql - Mysql - 我可以有一个在删除父母时不会被删除的孩子吗?
- tensorflow - Tensorflow 管道,批量预处理:初学者问题
- vb.net - 通过 COM 从 VB6 访问嵌套的 VB.NET 类
- ios - IOS中的领域:插入对象后无法更改主键
- java - Hibernate:在广泛的类层次结构中有效地加载具有祖先类型的对象列表