Я хочу внедрить/рефакторить приложение в соответствии с концепцией компонентов архитектуры Android, см. https://developer.android.com/jetpack/docs/guide
В этом разделе Компоненты архитектуры Android ViewModel - связь с Service/IntentService я нашел очень хороший ответ на архитектурный вопрос, см. https://stackoverflow.com/a/46736146/6251815
Но я хочу спросить, как привязать сервис из репозитория, потому что у нас здесь нет ни контекста, ни активности. Чтобы было ясно, вопрос заключается в том, как объединить обе концепции.
Какова моя ситуация?
Мне нужен связанный сервис (см. 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
Спасибо за любые подсказки, как объединить обе концепции
LiveData
там, и ваши клиенты (те, которые реализуютServiceConnection
) могут получить к ним прямой доступ - person pskink   schedule 02.11.2018IntentService
, то вы должны позвонитьstartService
, не так ли? так почему он также связан? у вас есть интерфейс для этой привязки? что возвращаетService#onBind
? - person pskink   schedule 02.11.2018