Компоненты архитектуры Android: LiveData как сервисный наблюдатель - PullRequest
0 голосов
/ 24 декабря 2018

Это скорее вопрос, который я делаю правильно.

У меня есть служба MediaPlayer для воспроизведения звука.Из-за небольшого количества требований, это ад обратного вызова со слишком большим количеством слушателей.

Например: В настоящее время у меня есть кнопка аудио маршрута, чтобы переключать аудио маршрутизацию между наушником и громкоговорителем.В настоящее время я использую привязанный сервис и вызываю метод reRouteAudio () on on service из своего пользовательского интерфейса и слушаю обратный вызов для получения результата, чтобы я мог изменить значок и действие на кнопке маршрута.

Чтобы проверить, будет ли он чищеЯ изменил выше поток на реализацию 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);

Кажется, что он работает нормально и выглядит намного чище.

Итак, мой вопрос: это нормально / Здорово?Правильно ли я думаю, что это путь, так как Google также устарел LocalBroadcastManager

...