Мера, макет и время рисования в Hierarchyviewer (лучше) Разъяснение

Я пытаюсь понять представление иерархии.

Поэтому я читал на developer.android.com значение трех точек:

Зеленый: для этой части времени рендеринга этот вид находится в более быстрых 50% всех объектов вида в дереве. Например, зеленая точка для времени измерения означает, что этот вид имеет более быстрое время измерения, чем 50% объектов View в дереве.

Желтый: для этой части времени рендеринга этот вид находится в более медленных 50% всех объектов View в дереве. Например, желтая точка для времени компоновки означает, что этот вид имеет более медленное время компоновки, чем 50% объектов View в дереве.

Красный: для этой части времени рендеринга этот вид является самым медленным в дереве. Например, красная точка для времени рисования означает, что этот вид занимает больше всего времени, чтобы нарисовать все объекты View в дереве.

Если я не ошибаюсь, разве это не означает, что всегда должно быть не более 3 просмотров с красными точками (самые медленные виды для каждой категории: мерка, макет, ничья), а затем половина просмотров желтая и наполовину зеленая.

Прежде всего, я вижу более трех просмотров с красными точками, и я не понимаю, почему.

Во-вторых, я не вижу, как эти значения могут помочь повысить производительность, учитывая, что это относительные значения. Всегда будет половина просмотров быстрее, чем другая половина.

И глядя на Tree View, я вижу вид с visibility gone которая имеет небольшое время рисования. Не следует ли полностью игнорировать представления GONE?

Если я не ошибаюсь, разве это не означает, что всегда должно быть не более 3 просмотров с красными точками

Ваша логика хороша, но документ не должен указывать дерево, но на узле. Функция tool4s средства просмотра иерархии, которую вы используете для получения этих трех точек, – это Profile Node , и это начнет профилировать дерево из выбранного узла (произвольный корень дерева) до конца дерева.

Каждый View в ViewGroup ( макеты основаны на ViewGroup ), который содержит больше, чем View, будет иметь точки. В противном случае нет точек.

Поэтому сравнение производится только на уровне узла, а не на всем дереве, и именно поэтому вы можете получить больше трех красных точек (один для измерения, один для макета, один для рисования) для всего дерева, но не для Узел.

Во-вторых, я не вижу, как эти значения могут помочь повысить производительность, учитывая, что это относительные значения. Всегда будет половина просмотров быстрее, чем другая половина.

Точки помогают вам узнать, какой вид внутри группы просмотра является самым медленным для измерения / макета / рисования. Чтобы избежать зависания экрана, общая операция должна быть ниже 16,6 мс (андроид должен поддерживать частоту кадров 60 кадров в секунду).

Красная точка просто даст вам подсказку о том, какой вид вы должны профиль, но это не означает, что представление не оптимизировано, особенно со сложной иерархией с большим количеством детей.

Также, если вам нужно создать собственное представление, средство просмотра иерархии может помочь вам узнать, правильно ли вы выполняете быструю визуализацию.

Я вижу вид с visibility gone которая имеет небольшое время рисования. Не следует ли полностью игнорировать представления GONE?

View который имеет видимость, установленную в GONE , не будет проходить через onMeasure , onLayout и onDraw . Вы можете легко попробовать, если вы расширите виджет, как TextView, и переопределите эти методы с помощью Log.d, чтобы узнать, что произойдет.

Но я думаю, что время на розыгрыш происходит потому, что представление будет создано, затем прикрепится к окну и, наконец, изменит его видимость.

Пример с TextView. Первый шаг: объект создается через конструктор java public Text(Context context, AttributeSet attrs){...} ), тогда вызов для присоединения окна будет выполняться с protected void onAttachedToWindow() {...} и видимость protected void onWindowVisibilityChanged(int visibility) {} с protected void onWindowVisibilityChanged(int visibility) {}

Теперь, если вы хотите отладить больше своего пользовательского интерфейса, попробуйте с телефоном, у которого есть опция Debug GPU Overdraw в опции разработчика (не у всех его есть) или с эмулятором. Затем вы можете увидеть, где приложение перегружает, а затем оптимизирует ваш интерфейс. Отладка прошивки GPU Overdraw

Intereting Posts
Как замедлить и растянуть аудио в Android? Файл не связан ни с одним типом файла. Пожалуйста, определите ассоциацию Попытка масштабировать Bitmap на Android не работает Как разрешить сообщение об ошибке: «Этот AVD может не работать, если вы не установите … сначала»? Относительная компоновка. Между двумя пунктами Как сделать запрос на покупку нескольких предметов в функции биллинга Google Play в приложении Эмулятор Android не может распознать, что GPS включен Когда вы получаете трассировку стека в Eclipse с классами SDK в стеке, как вы можете видеть источники SDK? Cordova media plugin – остановить потоковое нерабочее – release () замораживает устройство Вызов AsyncTask из другой AsyncTask Диспетчер тегов Google отправляет целое число вместо десятичного Android AsyncTask остается в рабочем состоянии после завершения Работает ли $ http в телефонном разговоре? Использование почты и пароля для аутентификации через REST API Как использовать эмулятор Android через VNC