#android #performance #flutter #animation
#Android #Производительность #flutter #Анимация
Вопрос:
Я создаю игру на Flutter, которая в основном посвящена кубикам. Чтобы сделать фон главного меню интересным и динамичным, я добавил несколько размытых анимированных кубиков. Я также использую эти анимированные кубики в других местах игры. Что-то вроде этого:
Я начал использовать Flare в качестве библиотеки анимации, но производительность была очень плохой. (используя эту анимацию).
После этого я воссоздал анимацию в виде виджета Flutter. Однако производительность по-прежнему очень низкая. На OnePlus 3 я получаю где-то около 30-40 кадров в секунду, а на Galaxy s20 (в режиме 120 Гц) — где-то около 50-60 кадров в секунду. Ниже приведены времена рендеринга кадров для OnePlus. Конечно, я тестирую в режиме профиля. В основном растровый поток выполняет здесь большую работу.
Вот репозиторий github с кодом. Это минималистичная версия для воспроизведения проблемы с производительностью.
Насколько я могу видеть, никаких ненужных перестроек нет. Единственное, что очень часто перестраивается, — это SlideTransition (эта строка) для точек.
Что я могу сделать, чтобы улучшить производительность? Или что я могу попробовать для его профилирования. Я заметил, что удаление Transform.rotate (этой строки) помогает, но это не решает проблему полностью.
Я использую Flutter 1.20.2 и Dart 2.9.1 в Android Studio 4.0.1
Комментарии:
1. заметили ли вы низкую производительность на эмуляторе или на самом телефоне? Я заметил, что анимации, которые действительно отстают в эмуляторе, выглядят нормально, когда приложение скомпилировано и запущено на физическом устройстве.
2. Я тестировал его на Galaxy s20 и OnePlus 3. У обоих были запаздывающие анимации.