Cómo probar el rendimiento de la vista personalizada

Aug 19 2020

Quiero probar el rendimiento de representación de la IU de mi componente personalizado. Utilicé el siguiente caso de prueba para comprobar el rendimiento de la representación.

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;
    }

Usando este código, puedo probar el tiempo de renderizado del diseño. Así que cambié el diseño del diseño para un mejor rendimiento. Ahora estoy creando una clase de vista personalizada con múltiples diseños y componentes como imágenes, vistas de texto, etc. Adjuntaré la clase en tiempo de ejecución y los componentes se crearán en el tiempo de ejecución según la respuesta del servidor. No adjuntaré este componente personalizado en XML. Ahora quiero probar el rendimiento de renderizado de esta vista personalizada. Sugierame alguna herramienta o alguna forma de calcular el tiempo de renderizado de la interfaz de usuario para la vista personalizada.

Mi imagen de Profiler.

Respuestas

1 EsjayIT Aug 27 2020 at 16:55

Puede medir fácilmente el rendimiento utilizando el perfilador de herramientas incorporado de Android Studio (en el panel inferior izquierdo). importante: el rendimiento de la vista del cliente depende de un dispositivo en ejecución aquí hay una muestra que he probado para redmi 7a

dispositivo: redmi 7a RAM: 2GB

 private fun startTest() {
    for (x in 0..10000) {
        val textview = TextView(this)?.apply { text = "Dummy Text $x" }
        mLinearLayout?.addView(textview)
    }
}
  1. ejecutar un proyecto
  2. inicie el generador de perfiles, espere hasta que el gráfico se normalice
  3. en el botón Haga clic en startTest (), verá que el gráfico se volvió normal a alto
  4. seleccione el área que cubre el área alta del gráfico y vea la hora de inicio y la hora de finalización
  5. usa una calculadora simple y mide la diferencia

el resultado de mi caso de prueba: agregar textview 10000 veces en linearlayout toma 32.411s (información del dispositivo dada arriba)