Как проверить производительность пользовательского представления
Я хочу протестировать производительность рендеринга пользовательского интерфейса пользовательского компонента. Я использовал следующий тестовый пример, чтобы проверить производительность рендеринга.
private long getLayoutTime(int layoutRes) {
final Context targetContext = getInstrumentation().getTargetContext();
final LayoutInflater layoutInflater = LayoutInflater.from(targetContext);
final long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
final View view = layoutInflater.inflate(layoutRes, null);
view.setLayoutParams(new ViewGroup.LayoutParams(0, 0));
view.measure(View.MeasureSpec.makeMeasureSpec(1000, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
final int measuredHeight = view.getMeasuredHeight();
final int measuredWidth = view.getMeasuredWidth();
view.layout(0, 0, measuredWidth, measuredHeight);
}
return System.currentTimeMillis() - startTime;
}
Используя этот код, я могу проверить время рендеринга макета. Так что я изменил дизайн компоновки для лучшей производительности. Теперь я создаю класс пользовательского представления с несколькими макетами и компонентами, такими как изображения, текстовые представления и т. Д. Я прикреплю класс во время выполнения, и компоненты будут созданы во время выполнения на основе ответа сервера. Я не буду прикреплять этот пользовательский компонент в XML. Теперь я хочу протестировать производительность рендеринга этого настраиваемого представления. Пожалуйста, предложите мне какие-либо инструменты или способ рассчитать время рендеринга пользовательского интерфейса для пользовательского представления.
Мое изображение Profiler.

Ответы
вы можете легко измерить производительность с помощью встроенного профилировщика инструментов студии Android (в нижней левой панели). важно: производительность просмотра клиентов зависит от работающего устройства вот образец, который я тестировал для Redmi 7a
устройство: redmi 7a Оперативная память: 2 ГБ
private fun startTest() {
for (x in 0..10000) {
val textview = TextView(this)?.apply { text = "Dummy Text $x" }
mLinearLayout?.addView(textview)
}
}
- запустить проект
- запускаем профайлер, ждем пока график станет нормальным
- на кнопке Нажмите startTest (), вы увидите, что график стал нормальным до высокого
- выберите область, которая покрывает верхнюю область графика, и посмотрите время начала и время окончания
- используйте простой калькулятор и измерьте разницу
результат моего тестового примера: добавление textview 10000 раз в linearlayout занимает 32,411 с (информация об устройстве указана выше)
