214 похожих чатов

Всем привет. Есть вопрос по ViewModel -> Fragment + Single

Screen UI screen. фрагмент выводится загрузку нескольких файлов на сервер, для каждого файла выводится название, крестик отмены, байты (загружено/осталось) лоадер-крутилка, что текущий файл грузится. Была вся логика в Fragment и всё было хорошо, но тут решил переделать на Single UI State, как в рекомендациях гугла. Что происходит: делается emit во flow статуса экрана, который полностью перерисовывается. Проблема: flow так часто кидает события в collect(), что для каждого файла перерисовывается лоадер снова (его паркенсонит), на крестик отмены не успевает повеситься лисенер, как тут же стейт перерисовывается снова. debounce минимальный даже делать не вариант, т.к. теряется отзывчивость интейфейса. Коллеги, что делать в такой казалось бы простой ситуации?

4 ответов

24 просмотра

А почему лоадер перерисовывается? И сколько обновлений в секунду? В View есть ведь тоже оптимизации, из серии если вы Visible меняете на Visible, то просто ничего не произойдет. Вы же не пересоздаете программно весь экран?

Михаил-E1ement Автор вопроса
Алексей Ершов
А почему лоадер перерисовывается? И сколько обновл...

Ну перерисовывается экран, создаются новые view. Fragment не может хранить какого-то стейта по задумке (кешировать view)

Какая логика у вас прописана в collect? Судя по вашему описанию там прописано назначение лисенеров и вообще большая часть логики интерфейса. Там должно быть только изменение значения для лоадера. Крестик по идее вообще не должны трогать в этом методе. А тем более переназначать лисенер

Михаил E1ement
Ну перерисовывается экран, создаются новые view. F...

Это как это не может? Во View нельзя же просто взять и на каждый апдейт экрана все грохнуть и заново создать. Нужно делать ручками diff если вы динамически создаёте View, и пересоздавать только при необходимости. Условно говоря если стейт это текст, то не надо на каждое обновление создавать TextView, надо один раз создать а потом сетить текст. View не предназначены для того, чтобы ими каждый кадр жонглировать)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта