Компоненты архитектуры Android: ViewModel / Репозиторий против привязки к Сервису / IntentService - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу реализовать / реорганизовать приложение в соответствии с концепцией компонентов архитектуры Android, см. https://developer.android.com/jetpack/docs/guide

В этой теме Компоненты архитектуры Android ViewModel - связь с Service / IntentService , я нашел очень хороший ответ на архитектурную проблему, см. https://stackoverflow.com/a/46736146/6251815

Но я хочу спросить, как связать сервис из репозитория, потому что у нас здесь нет ни контекста, ни активности. Чтобы было ясно, вопрос заключается в том, как объединить обе концепции.

Какое у меня положение?

Мне нужно иметь boundService (см. https://developer.android.com/guide/components/bound-services),, который поставляется сторонней организацией в виде библиотеки (давайте назовем это «Сторонний SDK»). Этот «Сторонний SDK» будет выполнять некоторые асинхронные операции по Bluetooth подключение к некоторому внешнему оборудованию, таким образом, оно работает как более или менее постоянный фоновый сервис, однако оно реализовано как сервис (intentservice, таким образом, действие может связываться), и мы должны получать события путем реализации пользовательского интерфейса прослушивателя событий.

Что я хочу сделать?

Я бы тоже хотел использовать компоненты архитектуры. Я определил View и ViewModel и хотел бы использовать репозиторий как Dagger2 Singleton, который обеспечивает локальное хранилище данных, а также вызовы веб-службы, см. https://developer.android.com/jetpack/docs/guide#fetch-data

Мое первое намерение состояло в том, чтобы я мог обрабатывать «сторонний SDK» также в качестве некоего асинхронного квази-удаленного источника данных, и, таким образом, хранилище также должно связываться с этим «сторонним SDK».

К сожалению, нам обычно требуется следующий код для привязки фоновой службы к операции:

Intent csIntent = new Intent(XXX, ThirdPartyService.class);
YYY.bindService(csIntent, <instance of ServiceConnection>, Context.BIND_AUTO_CREATE);

где XXX и YYY - контекст и активность (но оба не должны появляться в репозитории!)

В чем проблема?

Как следует изменить эту концепцию привязки фоновой службы, ориентированной на деятельность, в соответствии с https://developer.android.com/guide/components/bound-services,, если я хочу получить доступ к этой фоновой службе из «хранилища компонентов архитектуры», которое реализовано как dagger2 @Singleton согласно https://developer.android.com/jetpack/docs/guide#manage-dependencies

К сожалению, единственный полуофициальный документ, который я нашел для этой проблемы, заявляет, что демо «должно» быть сделано (но билет был закрыт): https://github.com/googlesamples/android-architecture-components/issues/20

Спасибо за любые советы, как объединить оба понятия

...