#android #kotlin-flow
Вопрос:
Я создал репозиторий местоположения, который отвечает за сбор данных о местоположении и передачу их тем, кто слушает, код сейчас выглядит примерно так:
@Singleton class LocationRepository @Inject constructor( app: Application ) { private val _location = MutableStateFlow<Location?>(null) private val subscribers = AtomicInteger() val location: Flow<Location?> = _location.onSubscription { if (subscribers.getAndIncrement() == 0) startUpdates() }.onCompletion { if (subscribers.decrementAndGet() == 0) stopUpdates() } private val client = LocationServices.getFusedLocationProviderClient(app) private val locCb = object : LocationCallback() { override fun onLocationResult(var1: LocationResult?) { newLocationResult(var1) } override fun onLocationAvailability(var1: LocationAvailability) {} } private val request = LocationRequest.create() init { request.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY request.interval = 5000L request.fastestInterval = 2500L } private fun startUpdates() { //code to start getting location updates } private fun stopUpdates() { //code to stop getting location updates } }
прямо сейчас я обрабатываю текущее количество подписчиков с AtomicInteger
помощью , есть ли способ запустить startUpdates
код и stopUpdates
код автоматически, когда первый подписчик подписывается, а последний подписчик отписывается?