У меня есть некоторые проблемы с производительностью в моем приложении (джанк и зависание кадров), которые видны пользователю даже в режиме релиза. Мои проблемы начинаются с того, что пользовательскому интерфейсу приходится много перестраивать на основе одного действия - кнопки воспроизведения / паузы.
Мое приложение построено на базе streamBuilders, и при нажатии кнопки «Воспроизведение / пауза» в поток добавляется состояние, и необходимо перестроить до 4 виджетов одновременно, чтобы справиться с изменениями. Это вызывает зависание в кадрах от 0,5 секунды до даже 1 секунды с явным сотрясением в виджетах spla sh из Inkwell
.
Я попытался уменьшить количество активных подписок на поток, но это совершенно невозможно без капитального изменения структуры.
Код триггера - это простой вызов плагина (изолированный ) и обновление потока с новым значением. Весь код хранится и выполняется в одном и том же потоке (потоке пользовательского интерфейса).
Есть ли необходимость принудительно выполнить перестройку пользовательского интерфейса или делегировать часть восстановления независимому потоку?
РЕДАКТИРОВАТЬ: мой код с открытым исходным кодом: https://github.com/moda20/flutter-tunein
Таким образом, запуск этого скажет плагину audioPlayer для воспроизведения треков это происходит мгновенно и не имеет проблем. проблема заключается в следующих строках, где вызывается updatePlayback
, и он выдвигает новое значение MapEntry<PlaybackState, Tune>
, содержащее текущее состояние воспроизведения и текущее воспроизведение песни в поток playerState$
. Это приведет к тому, что все подписки streamBuilder будут обновлены sh, и есть несколько таких, которые в настоящее время уже собраны и хранятся в памяти.