Comments 4
В этом случае естественным образом может возникнуть состояние гонки, когда кто-то из кэша читает данные на одном потоке и в это же самое время другой поток сходил в сеть и решил этот кэш обновить. Отсюда потребность в потокобезопасной коллекции, например ConcurrentHashMap.
Потокобезопасная хешмапа помогает в вашем сценарии постольку поскольку, потому что всё равно остается проблема синхронизации бизнес-логики. Если нужно разложить данные не в одну хешмапу, а в две — то у вас моментально наступает рассинхрон, и читающий поток прочитает мешанину из старых и новых данных. "Низкоуровневый" ReadWriteLock решает проблему на ура.
Более простой пример — когда мы храним вместе с данными TTL. Два потока идут читать, видят протухший кеш, идут на бэк. Никаких ConcurrentModificationException, но налицо гонка.
В оставшихся случаях достаточно использовать «высокоуровневые» инструменты вроде потокобезопасных коллекций
Как мы видим, недостаточно
Я могу привести два аргумента
Три: стектрейсы от Rx должны быть запрещены Женевской конвенцией.
Замечу только, что лично не встречался с проектами, на которых это было бы драматическое количество времени, или хотя бы настолько серьезное, чтобы поднять вопрос о том стоят ли compile-time гарантии потери в скорости сборок.
В этом месте у меня появляются вопросы, потому что kapt довольно прожорливый. Либо у вас зашкаливающий уровень модуляризации, где спасает кеширование, либо микропроекты, где и генерить толком нечего. В моем проекте kapt на холодной сборке съедает треть всего времени.
С KSP, говорят, будет повеселее, но он пока в бете.
Резюмируя ответ на изначальный вопрос — использовать ли в проекте с Dagger сабкомпоненты — важно понимать зачем вообще они используются.
В ответе вообще никак не затронут вариант использования component dependencies, так что неясно, как тут можно резюмировать.
Вопрос от человека, отставшего от разработки под Андроид:
Все уже окончательно перешли на Котлин, или Джаву ещё вполне себе используют? Везде все пишут про библиотеки, которые или сильно завязаны на Котлин, либо же в Джаве ими пользоваться мучительно больно. В то же время, Джава используется много где, тогда я как Котлин на практике можно встретить только в Андроид-разработке, и особо ради этого учить его желания нет... Стоит ли Котлин того?
Kotlin приятнее в разы, чем java. В kotlin есть coroutines, что как бы такой не слабый плюс по сравнению с голыми потоками и Rx. В Android это уже давно основной язык, все примеры идут на нем. А compose на java вообще не заведется например.
В Android уже давно все новые проекты на Kotlin (по моим наблюдениям), естественно есть и старые проекты, где часть на Java. Учить Kotlin после Java - дело пары дней, зато потом на Java возвращаться желания не возникает.
Ответы на частые вопросы от начинающих Android-разработчиков