Как реализовать метод View.onDraw()? (4/4)
При разговоре о реализации метода onDraw() речь часто заходит об оптимизациях этого метода и других вещей, связанных с UI.
Не следует выполнять вычисления и создавать объекты в методе onDraw(). Создание новых объектов может спровоцировать сборку мусора, что приводит к Stop the world паузам и лагам пользовательского UI. Создавайте объекты Paint при инициализации view и переиспользуйте их в методе onDraw(). Также избегайте создания объектов во время отработки анимаций.
Другой способ оптимизировать UI – уменьшить количество вызовов метода onDraw(). Большинство вызовов onDraw() является результатом отработки invalidate(), поэтому старайтесь избегать частого вызова этого метода.
Еще одна дорогая операция – обход view-иерархии. При отработке метода requestLayout() система проходит по всей иерархии, чтобы определить размеры каждой из view. Для некоторых лэйаутов проход выполняется несколько раз, что вызывает проблемы с производительностью.
Для создания плавного UI необходимо уменьшать вложенность вью насколько это возможно. Старайтесь создавать кастомные плоские view, вместо нескольких вложенных стандартных лэйаутов. Для не универсальных view проще вычислять размеры, основываясь на специфике их использования в приложении.
#View
При разговоре о реализации метода onDraw() речь часто заходит об оптимизациях этого метода и других вещей, связанных с UI.
Не следует выполнять вычисления и создавать объекты в методе onDraw(). Создание новых объектов может спровоцировать сборку мусора, что приводит к Stop the world паузам и лагам пользовательского UI. Создавайте объекты Paint при инициализации view и переиспользуйте их в методе onDraw(). Также избегайте создания объектов во время отработки анимаций.
Другой способ оптимизировать UI – уменьшить количество вызовов метода onDraw(). Большинство вызовов onDraw() является результатом отработки invalidate(), поэтому старайтесь избегать частого вызова этого метода.
Еще одна дорогая операция – обход view-иерархии. При отработке метода requestLayout() система проходит по всей иерархии, чтобы определить размеры каждой из view. Для некоторых лэйаутов проход выполняется несколько раз, что вызывает проблемы с производительностью.
Для создания плавного UI необходимо уменьшать вложенность вью насколько это возможно. Старайтесь создавать кастомные плоские view, вместо нескольких вложенных стандартных лэйаутов. Для не универсальных view проще вычислять размеры, основываясь на специфике их использования в приложении.
#View