Drawn out: how Android renders (Google I/O ’18) — интересное видео с рассказом о системе рендеринга Android. Основная цель — донести до зрителя идею, что малейшие строчки их кода и малейшие изменения интерфейса приводят в движение огромные механизмы и это следует иметь в виду. Простые примеры:
- простейшее окошко со списком состоит из более чем десятка лейаутов;
- простая операция смены цвета элемента приводит к его полной инвалидации, то есть пересчету состояния и размеров элемента, а кроме того, изменению информации обо всех предках этого элемента;
- затем эта информация должна быть синхронизирована с потоком отрисовки, работающим с GPU, плюс ему должны быть отданы битмапы;
- затем список необходимых для отрисовки операций перестраивается с целью их оптимизации на GPU (на видео есть превосходный пример на тему отрисовки Gmail в разных вариантах);
- с помощью GL-команд выполняется отрисовка нужного изображения, которое затем возвращается обратно в тред отрисовки;
- затем в дело вступает SurfaceFlinger, который собирает все части интерфейса Android в единое целое.
И это всего лишь то, что происходит при нажатии на элемент списка. В видео также есть рассказ о происходящем во время промотки этого списка. Рекомендую посмотреть.