Приложение, получающее LiveData от Сервиса в том же apk (процессе) - плохая практика или нет? - PullRequest
1 голос
/ 02 октября 2019

У меня есть служба, которая собирает данные и должна пережить изменения жизненного цикла приложения, пока приложение находится в фоновом режиме. Эта служба находится в том же процессе, что и мое приложение, то есть также зарегистрирована в манифесте.

Служба отправляет данные LiveData в приложение, а основное приложение извлекает эти данные LiveData, связываясь со службой и делая что-то вроде:

private void onServiceConnected(TicketValidatorService service) {
    ...
    service.getStatus().observe(this, new Observer<SomeStatus>() {
        @Override
        public void onChanged(SomeStatus status) {
            handleStatusChanged(status);
        }
    })
    ...
}

Это считается плохой практикой? Или мне лучше общаться через Messenger / Handler или LocalBroadcastManager через границу службы / приложения? Было бы сложно перевести службу в другой процесс, но я не думаю, что должен делать это ради своей задачи.

1 Ответ

0 голосов
/ 03 октября 2019

Связь с местной службой напрямую не считается плохой практикой и фактически официальная рекомендация . Нет причин усложнять ваш код для поддержки межпроцессного взаимодействия, когда вы не собираетесь его использовать. Кроме того, этот тип связи включает в себя маршалинг / демаршалинг, который добавляет ограничения на типы данных, через которые вы можете проходить, и имеет некоторое снижение производительности.

Также обратите внимание, что начиная с Android 8 существуют ограничения на фоновые сервисы. Поэтому, если вы не используете свой сервис в качестве приоритетного, он не будет работать долго после того, как ваше приложение перейдет в фоновый режим.

...