Как использовать компоненты архитектуры с MediaBrowserService?

Я пытаюсь создать приложение, которое воспроизводит звук с помощью MediaBrowserService, но также использует новые компоненты архитектуры для структурирования всего приложения. Ранее я использовал MediaBrowserService для другого приложения ( https://github.com/willhwongwork/PodCast), но в этом приложении я не использовал методы OnGetRoot() и OnGetChildren() для загрузки данных, которые я просто загружаю, используя загрузчик или asynctask. из сети (и в этом приложении нет архитектуры).

Так что теперь, если я хочу использовать LiveData и ViewModel, как мне структурировать код? Должен ли я использовать их в MediaBrowserService и через методы OnGetRoot() и OnGetChildren() предоставлять данные в пользовательский интерфейс?

2 ответа

Вы можете использовать метод onLoadChildren() для загрузки фрагментов данных, используя новую библиотеку подкачки, которая является частью компонентов архитектуры Android. Я написал сообщение об этом, где я использую курсор для извлечения MediaItems из MediaStore, но то же самое можно сделать и с LiveData.

В отличие от AppCompatActivity или поддержка Fragment которые LifecycleOwner благодаря которому мы можем использовать ViewModelProviders а также observe из LiveData, Service не реализует LifecycleOwner интерфейс.

Тем не менее, есть LifecycleService, который реализует LifecycleOwner интерфейс. Я не думаю, что MediaBrowserService реализует LifecycleOwner следовательно, вам нужно использовать ServiceLifecycleDispatcher и создать собственный MediaBrowserService,

Примечание: Пожалуйста, обратите внимание на то, что Флорина говорит о Сервисе с жизненным циклом: https://github.com/googlesamples/android-architecture-components/issues/137