Size: a a a

Android Architecture

2020 February 12

I

Igor in Android Architecture
так а в чем проблема корутин?
источник

mP

mr. PESIK in Android Architecture
Возможно я не до конца понимаю как правильно запускать работу и переключаться между потоками
источник

mP

mr. PESIK in Android Architecture
Именно как это написать
источник

I

Igor in Android Architecture
1) не похоже, что reportsInteractor.getReports асинхронный
2) если долго выполняется, смотрите внутрь reportsInteractor.getReports, причем тут корутины?
источник

mP

mr. PESIK in Android Architecture
reportsInteractor.getReports - suspend функция, использующая ретрофит
источник

mP

mr. PESIK in Android Architecture
Igor
1) не похоже, что reportsInteractor.getReports асинхронный
2) если долго выполняется, смотрите внутрь reportsInteractor.getReports, причем тут корутины?
потому что ощущение что долго переключается между потоками, потому что запрос я кеширую и должно все выполнятся быстро при повторных вызовах
источник

mP

mr. PESIK in Android Architecture
и выполнялось, пока я CoroutineScope не перенес в presenter
источник

mP

mr. PESIK in Android Architecture
до этого во view делал
источник

DE

Denis Egorov in Android Architecture
mr. PESIK
CoroutineScope(Dispatchers.Main).launch {
           view?.showChartsLoadBars()
           withContext(Dispatchers.IO) {
               val reportsResult = reportsInteractor.getReports(generalTimeRange, step)
               withContext(Dispatchers.Main) {
                   if (reportsResult is AppResult.Success) {
                       val reports = reportsResult.value
                       updatePoints(currentReport, reports)
                   } else {
                       showError(reportsResult as AppResult.Error)
                   }
                   view?.hideChartsLoadBars()
               }
           }
       }

где reportsInteractor.getReports(generalTimeRange, step) - проиходит асинхронщина. Но че то долго
1. Нигде не хранишь скоуп. А если надо отменить корутину?
2. view?.something(). Если ты не кэшируешь результат запроса, то стоит ли вообще его делать, если view == null?
3. withContext(IO) не нужен, так как у okHttp свой ExecutorService.
4. Напрашивается when() на разбор ответ AppResult
источник

I

Igor in Android Architecture
источник

mP

mr. PESIK in Android Architecture
Denis Egorov
1. Нигде не хранишь скоуп. А если надо отменить корутину?
2. view?.something(). Если ты не кэшируешь результат запроса, то стоит ли вообще его делать, если view == null?
3. withContext(IO) не нужен, так как у okHttp свой ExecutorService.
4. Напрашивается when() на разбор ответ AppResult
1 - потом решил это сделать
2 - кэширую, но последнее не понял
3 - не знал, спасибо
4 - в базовой вью все разбирается
источник

ВС

Виталий Сычёв in Android Architecture
Подскажите пожалуйста как организовать проверку runtime permissions в чистой архитектуре?
источник

МE

Михаил E1ement in Android Architecture
Arkadii Ivanov
Brakepoint наверно срабатывает на сам вызов оператора toList. Но сам toList будет ждать, пока upstream завершится с onComplete или onError.
копнул дальше, onComplete всё же вызывается:
if (!d.isDisposed()) {
               if (v == null) {
                   observer.onComplete();
               } else {
                   observer.onSuccess(v);
               }
           }
получается без OnNext цепочка прерывается?
как-то всё криво в room+rx
источник

AI

Arkadii Ivanov in Android Architecture
Михаил E1ement
копнул дальше, onComplete всё же вызывается:
if (!d.isDisposed()) {
               if (v == null) {
                   observer.onComplete();
               } else {
                   observer.onSuccess(v);
               }
           }
получается без OnNext цепочка прерывается?
как-то всё криво в room+rx
Поставьте doOnComplete сразу после geByUniqueId, если сработает, значит в другом проблема, если нет, значит поток не завершается. Вообще если это observable, то это нормально, room будет обновлять о поступлении данных. Используйте Maybe
источник

МE

Михаил E1ement in Android Architecture
Arkadii Ivanov
Поставьте doOnComplete сразу после geByUniqueId, если сработает, значит в другом проблема, если нет, значит поток не завершается. Вообще если это observable, то это нормально, room будет обновлять о поступлении данных. Используйте Maybe
В общем Maybe и doOnComplete помогло, продвинулся дальше) спасибо
источник

А

Артур in Android Architecture
Не подскажете как в MVI обрабатывать вложенные стейты ? Есть родительский фрагмент и два вложенных фрагмента, действия в одном фрагменте могут влиять на стейт других
источник

AD

Aleksey D. in Android Architecture
Артур
Не подскажете как в MVI обрабатывать вложенные стейты ? Есть родительский фрагмент и два вложенных фрагмента, действия в одном фрагменте могут влиять на стейт других
источник

AD

Aleksey D. in Android Architecture
Артур
Не подскажете как в MVI обрабатывать вложенные стейты ? Есть родительский фрагмент и два вложенных фрагмента, действия в одном фрагменте могут влиять на стейт других
ваще это лучше
источник

AI

Arkadii Ivanov in Android Architecture
Артур
Не подскажете как в MVI обрабатывать вложенные стейты ? Есть родительский фрагмент и два вложенных фрагмента, действия в одном фрагменте могут влиять на стейт других
Не делать сложных вложенных состояний?
источник

AD

Aleksey D. in Android Architecture
а если это нужно?)
источник