Какой самый сложный кастомный UI компонент вы делали
Что проверяют
Насколько глубоко вы знаете систему отрисовки Android: измерение, раскладку, рисование и обработку касаний. Рассказ о компоненте это повод, дальше интервьюер пойдёт по деталям: почему View, а не ViewGroup, как избежали лишних перерисовок, что с доступностью.
Как отвечать
Возьмите свой реальный компонент и расскажите его по слоям. Каркас для классических View:
- базовый класс: если компонент рисует сам, наследуйте
View.ViewGroupнужен, когда вы раскладываете дочерние элементы, и по умолчанию он не вызываетonDraw, пока не вызватьsetWillNotDraw(false); - измерение:
onMeasureс разборомMeasureSpec(EXACTLY,AT_MOST,UNSPECIFIED) и обязательнымsetMeasuredDimension, для контейнера ещёonLayout; - рисование:
onDrawвызывается часто, поэтомуPaint,PathиRectFсоздаются заранее, а не в каждом кадре.invalidate()просит перерисовать,requestLayout()просит заново измерить, и путать их дорого; - касания:
onTouchEvent,GestureDetectorиScaleGestureDetectorдля жестов,ViewConfiguration.getScaledTouchSlop()для порога,requestDisallowInterceptTouchEventвнутри прокрутки; - атрибуты и состояние:
declare-styleable,obtainStyledAttributesс последующимrecycle(), сохранение черезonSaveInstanceState; - доступность: для виртуальных элементов внутри одного View нужен
ExploreByTouchHelper, иначе TalkBack видит компонент как пустой прямоугольник.
Если пишете на Compose, те же идеи выглядят иначе: Canvas или Modifier.drawBehind, свой Layout с измерением, жесты через pointerInput, а главная забота это лишние рекомпозиции.
Закончите тем, что было трудно и как вы это проверяли: профилирование GPU, Layout Inspector, разные плотности экрана. Цифры приводите свои.
Где спотыкаются
Выбирают компонент, который по сути обёртка над готовой библиотекой, и на первом уточнении про onMeasure разговор заканчивается.
Создают объекты в onDraw: сборщик мусора срабатывает во время анимации, и она дёргается.
Хвастаются ростом вовлечённости на круглые проценты, но не могут сказать, как её мерили. Технический рассказ сильнее маркетинговых цифр.