首页 > 解决方案 > 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

标签: androidandroid-serviceandroid-support-libraryandroid-livedataandroidx

解决方案


推荐阅读