Size: a a a

Kotlin Community

2020 March 18

KZ

Konstantin Zolotov in Kotlin Community
Alexander Nozik
А что именно из этого нужно?
Ну как обычно — шаринг мультикаст callback flow, чтоб с await Close было. Ондроед, управление скоупом.
источник

RE

Roman Elizarov in Kotlin Community
А кокнретней? Что там бегает?
источник

KZ

Konstantin Zolotov in Kotlin Community
Roman Elizarov
А кокнретней? Что там бегает?
Ну из примеров, например бывает нужен стрим событий от чего-нибудь системного в нескольких местах. Например, обновление GPS, или состояние сети. Но нужны они только тогда, когда есть потребители. Сейчас приходится выворачиваться каналами + подсчёт количества потребителей вручную.
источник

AN

Alexander Nozik in Kotlin Community
Konstantin Zolotov
Ну из примеров, например бывает нужен стрим событий от чего-нибудь системного в нескольких местах. Например, обновление GPS, или состояние сети. Но нужны они только тогда, когда есть потребители. Сейчас приходится выворачиваться каналами + подсчёт количества потребителей вручную.
То есть надо на первого потребителя открыть, на последнего закрыть?
источник

AN

Alexander Nozik in Kotlin Community
А как буфер должен работать?
источник

AN

Alexander Nozik in Kotlin Community
И при подписке потребителя нужно ли иметь историю того, что было до подписки?
источник

AN

Alexander Nozik in Kotlin Community
У меня просто сейчас будет схожая задача при подписке на события девайсов. Что-то довольно легко сделать на коленке, но сложно сделать универсальный апи
источник

KZ

Konstantin Zolotov in Kotlin Community
Alexander Nozik
То есть надо на первого потребителя открыть, на последнего закрыть?
Да, именно так. В обсуждении там как раз было про указание размера буфера. Сейчас по ситуации либо ConflatedBroadcastChannel, либо при превращении во flow опрашивать текущее значений и пихать его в onStart
источник

AN

Alexander Nozik in Kotlin Community
Просто без буфера довольно легко сделать ручками. А вот с буфером надо думать
источник

RE

Roman Elizarov in Kotlin Community
Стрим событий или информация о текущем состоянии? Это разные вещи. А что делать с событиями которые произошли до того, как потребители появились?
источник

AO

Alexey Otts in Kotlin Community
Тут вообще выглядит как обзёрвабл
источник

AN

Alexander Nozik in Kotlin Community
Alexey Otts
Тут вообще выглядит как обзёрвабл
Там есть нюанс. Есть что-то, что генерит события постоянно. Надо, чтобы при наличии подписчиков оно куда-то оправлялось, но проблема в том, что происходят с событиями до того, как возник подписчик. Также вопрос в том, что если есть несколько подписчиков, то кому какую историю хранит
источник

AO

Alexey Otts in Kotlin Community
Ну тут получается нужно только актуальное состояние
источник

AN

Alexander Nozik in Kotlin Community
Alexey Otts
Ну тут получается нужно только актуальное состояние
В этом и вопрос. Если нужно только актуальное состояние - можно самому довольно легко сделать
источник

KZ

Konstantin Zolotov in Kotlin Community
Roman Elizarov
Стрим событий или информация о текущем состоянии? Это разные вещи. А что делать с событиями которые произошли до того, как потребители появились?
В ряде случаев, текущее состояние будет идентичным последнему событию. В идеале как раз такое происходит с состоянием сети, в gps зависит от указанного threshold, но в целом можно пренебречь. В ряде случаев оно действительно неприменимо и нужен именно буфер.
источник

AN

Alexander Nozik in Kotlin Community
Konstantin Zolotov
В ряде случаев, текущее состояние будет идентичным последнему событию. В идеале как раз такое происходит с состоянием сети, в gps зависит от указанного threshold, но в целом можно пренебречь. В ряде случаев оно действительно неприменимо и нужен именно буфер.
источник

KZ

Konstantin Zolotov in Kotlin Community
О, а там как раз еще вот что есть с учетом новых реалий
https://github.com/Kotlin/kotlinx.coroutines/pull/1716
источник

КР

Кирилл Романенко in Kotlin Community
Мне одному кажется, что 1.3.70 самый косячный релиз? У меня:
0) Сломался fold у either. Кейс:
result.fold(
ifLeft = { SomeResult.Bad() },
ifRight = { if (flag) SomeResult.Ok() else SomeResult.Bad() }
)


Говорит, что ждёт SomeResult.Bad, а приходит SomeResult.Ok. Приходится ручками писать тип SomeResult. И при этом студия продолжает считать, что тип не надо указывать, котлин сам выведет.
1) периодически отваливаются некоторые top level функции, при этом студия их видит, но проект не собирает, пока клин ребилд не сделаешь
2) иногда просто так в рандомном месте падает с ошибкой что пришёл null там, где его не может быть, опять же клин ребилд помогает
3) и ещё всякие подобные происшествия, которых не было никогда раньше.
источник

КР

Кирилл Романенко in Kotlin Community
У моего коллеги, кстати, была 2 ошибка постоянной, даже инвалидирование кэшей не помогло. Я сел ему помочь - на моей машине всё ок собралось из тех же исходников.
источник

VP

Vladimir Petrakovich in Kotlin Community
С выводом типов может помочь только отключение нового вывода в IDE или включение в компиляторе
источник