Теперь мне нужно разработать программное обеспечение для Android, основная цель которого — подключение к другому устройству через Bluetooth BLE. Для этого я использую архитектуру MVVM. Однако у меня есть сомнения относительно того, должна ли служба находиться в верхней части репозитория или в нижней его части. Теперь я использую Kotlin Flow и поддерживаю некоторые потоки Kotlin в своем сервисе, а моя модель представления просто подписывается на них. Репозиторий просто предоставляет некоторые базовые методы, такие как getScanFlow(), ConnectToTargetDevice() и так далее. Служба вызывает этот метод для поддержания собственных потоков, например
Код: Выделить всё
// 1. scan
scanJob = serviceScope.launch {
withTimeoutOrNull(20000L) {
bluetoothRepository.getScanFlow(ScanSettings.Builder().build())
.catch { e ->
Log.e(TAG, "startBluetoothManagement: scan error",)
e.printStackTrace()
}
.collect { device ->
// 获取到device对象
if (device == null) return@collect
Log.d(TAG, "startBluetoothManagement: scanned:${device}")
updateScannedDevices(ScannedDevice(device))
}
}
// overtime
updateConnectionState(BluetoothState.DisConnected)
}
и:
Код: Выделить всё
// in service, which open bluetooth and location
val openResult = bluetoothRepository.ensureBluetoothAndLocationEnabled()
репозиторий поддерживается путем внедрения зависимостей:
Код: Выделить всё
@Inject
lateinit var bluetoothRepository : BluetoothRepository
Разумна ли такая архитектура? Нужно ли мне оправдывать размещение службы в нижней части репозитория?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... th-program