Android Rendimiento Desarrollo Optimización de la caja (2) aplicación de optimización Caton

prefacio

Optimización del rendimiento de esta serie de artículos:
1, a modo de explicación fácil de entender, explicar el valor práctico de una tecnología
2, un seguimiento de fuentes detallado por escrito, captura en el origen, la estructura de clases de dibujo, trata de explicar en detalle los principios del proceso de exploración
3 proporcionando el proyecto de demostración Github puede correr, pero yo he proporcionado el código, proporcionan más ideas, mejores ideas, por favor cv apropiada,
4, terminando una serie de precauciones durante el principio de funcionamiento del proceso de exploración de una cisterna, o en la demo
5, La figura usando gif, la mayoría de los resultados operativos intuitivos muestran demostración **

Si cree que los detalles son demasiado delgadas, puede omitir para ver la conclusión.
capacidad limitada, si la descripción que se encuentra inadecuada, la bienvenida a los mensajes de la crítica.

 

Conecte un artículo: comenzar optimización de la velocidad

contorno del cuerpo

  • DDMS
  • systrace
  • TraceView
  • Acerca de descubierto

texto

DDMS

DDMS significa Dalvik depuración monitor de servicio, el entorno de desarrollo Android Dalvik [máquina virtual] depuración Monitor de servicio

Anteriormente utilizado eclipsetiempo, hay una entrada directa para abrir las DDM, pero dado que el uso de Android Studio, la entrada no lo hizo .... pero en realidad dentro del directorio del SDK está todavía allí.

Después DDMS de apertura:

Específicamente atenuar digamos más tarde.

systrace

systrace es un SDK de comandos, y está escrito en Python, estaba usando python2.7, pero más tarde se actualiza la pitón 3.0 Google no ha actualizado este comando, nos lleva ahora a comando use systrace, sólo que con Python 2.7 versión, en circunstancias normales, con la última versión 2.7 de 2.7.16 en la línea, el sitio web oficial de descarga.

Entonces, ¿dónde comando systrace?

premisa

Para usarlo, primero de todo lo que queremos instalar un buen python2.7.16, y luego configurar las variables de entorno, hasta que podamos utilizar correctamente el comando python (

systrace es nuestro rastreador de datos de índice en un dispositivo Android en un período de tiempo, entendida como: registro de la operación del equipo, pero esto no es un registro de texto, sino un archivo html, es necesario utilizar el navegador Google  Chrome: // / rastreo abre plugin. Los pasos específicos son los siguientes:
1. Abrir el CMD, entrar en el directorio systrace:

2. Introducir  python systrace.py -b 32768 -t 5 -o mytrace.html wm gfx input view sched freq, a continuación, Intro
para explicar la secuencia de comandos 本文不做systrace命令的详解,这些东西都是死命令,百度即可():

  • python script en Python que se ejecutará
  • systrace.py nombre del guión
  • -b Establecer el tamaño del búfer
  • -t Rastreo de registro de 5 segundos
  • -o mytrace.html de salida a un archivo dentro de este
  • wm Dentro WindowManager registro contiene información WindowManager
  • gfx Gráficos de registro contiene información gráfica de representación
  • input registro de entrada contiene información de dispositivo de entrada
  • view Ver la información de registro incluido en la vista de sistemas Sistema
  • sched La información de programación de la CPU programación incluye un registro de la CPU
  • freq registro de frecuencia de la CPU contiene información

Aquí está la cisterna;

En una máquina real, por ejemplo vivo X7, se generará un htmlarchivo no, de alguna manera, he cambiado el simulador, muy bien, sin embargo, la máquina real probar otros modelos.

NetEase MuMu utilizo el simulador para experimentar, consigo los siguientes resultados:

 

3. Después de obtener el archivo, abrir el navegador de Google: en la barra de direcciones  chrome://tracing/ y luego cargar simplemente haga doble clic en el archivo que :( o html archivo)

4, donde tenemos una gran cantidad de indicadores de desempeño, incluyendo la imagen por encima del uso de las fuentes marca roja de la CPU multi-core situación CPU programación, hilo principal interfaz de usuario, la prestación hilo y así sucesivamente, pero desarrollamos la capa de aplicación para resolver el problema principal es la aplicación Caton en general, sólo tiene que centrarse en  el hilo principal interfaz de usuario掉帧情况 puede estar de acuerdo con la siguiente figura:

Se detalla en este aspecto 带圈的F:

  • Las coordenadas enteras, el eje horizontal es el tiempo, el tiempo aumenta la escala de izquierda a derecha, en nombre de los indicadores en el tiempo
  • 带圈的F : Verde, amarillo y rojo. Donde el verde indica sorteo normal, no necesitamos a la atención, la preocupación es de color amarillo y rojo, especialmente el rojo.
  • Clic con el ratón sobre una M roja, y luego presione el teclado Gteclas, habrá 红色的竖线representantes de una línea roja entre cada dos de largo (la mayoría de frecuencia de actualización de la pantalla del teléfono es todavía 60, por lo que cada dibujo sobre 16.67MS), este F la razón es de color rojo, ya que este es un largo dibujado la interfaz de usuario mucho más de uno, si la interfaz de usuario no se puede completar en un plazo de, resultará en pérdida de fotogramas, una vez que la pérdida de fotogramas, bajo la percepción del usuario es que Caton .
  • Mira:

.

Utilizar el ratón para arrastrar y soltar, se puede ver a través de una interfaz gráfica que hace tiempo que se necesita para dibujar: a116.868ms

  • Alerta en la columna de la siguiente encontrado sospechoso 掉帧culpable

 

Aquí se refleja nuestra bitmapopinión de cargado conducido fuera del marco.
Seguimos ampliando los próximos dos flechas, se puede ver:

Descripción Inglés aquí, es ingeniero de Google para darnos consejo que probablemente traducir este pasaje:

El primer párrafo descriptionmedios:修改/新绘制的位图必须上传到GPU。因为如果上传的总像素量很大,这是很昂贵的,所以每帧减少这个动画/上下文中位图的波动量。

El segundo párrafo descriptionde medio:生成这个帧的工作被重新调度了几毫秒,这是jank的功劳。确保UI线程上的代码不会阻塞其他线程上的工作,并且后台线程(例如网络或位图加载)在android.os上运行。进程#THREAD_PRIORITY_BACKGROUND或更低,因此它们不太可能中断UI线程。这些后台线程应该在内核进程的调度部分以130或更高的优先级出现。

En general, es decir Bitmap的使用不当导致掉帧, la solución es probablemente: Mapa de bits demasiado grande para ser cortado en el tamaño adecuado o hilo de fondo para la carga
En cuanto a los casos más específicos tramas descartadas otras soluciones, es necesario investigar el caso de acuerdo con el encuentro específico los datos.

Sobre Trace.beginSection y Trace.endSection

Viene con dos api es androidSdk, el papel es más systrace etiqueta, añadir una etiqueta, que reflejará la aplicación incluye entre nuestra pieza de dos API de código en los gráficos Systrace.
En pocas palabras, usted está alrededor de una pieza de código, además de Trace.beginSection y Trace.endSection, así:

Por lo tanto, se encuentra este en los gráficos Systrace.

Visible, consume mucho tiempo la aplicación de nuestro código, etc se puede reflejar en systraceel gráfico, haga clic en el cuadro rojo por encima de la zona, que será en el systraceque se encuentra en la parte inferior de la pantalla:

Si se agrega una ejecución de código de la etiqueta lleva más de un largo (16.67MS), entonces el trozo de código que provocó el hilo principal interfaz de usuario fuera de marco, el usuario es probable que se sienta Caton.

Aquí es un pozo

Si se agrega en la parte superior de la trace.beginSection y EndSection, todavía no se ve en el gráfico conjunto de etiquetas encima de su propia, a continuación, comprobar su comando systrace, no hay aumento -a [nombre de paquete de la aplicación]

Sé Conclusión

El ejemplo anterior, utilizo la aplicación cuando se detecta systrace arranque en frío, por lo que aquí pérdida de fotogramas, con el reflejo de un arranque en frío escribir el código en cuestión. Tenga en cuenta que el tiempo de agarre systrace no demasiado largo, entonces debe operar aplicación después systrace comenzó.

Tras el descubrimiento de fotogramas, en busca de alerta puede ver Google dar nuestra dirección sugerencias de optimización de aplicaciones, aunque no resuelve completamente el problema, pero por lo menos determinar una dirección general , probablemente sabe lo que es una pieza de código fuera de la cuestión.


TraceView

Código añadió en la aplicación  Debug.startMethodTracing("/sdCard/zhouzhou");, y Debug.stopMethodTracing();a continuación, ejecutar la aplicación, el fragmento de código anterior se puede realizar para asegurar que dos código incorporado. Por ejemplo, así:

cráter

El código anterior, si se agrega una carrera después de un tiro directo una excepción, comprobar que usted no tiene permiso para añadir lo siguiente:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

A continuación, encontrar el archivo, exportados a un ordenador:

Entonces lo primero que dijo que deberíamos usar las DDM, en primer lugar abrir las DDM, Archivo- abrirArchivo abrir el archivo que acaba de .trace

Este contiene todas las llamadas a métodos de este código.

muestra la tabla

Hay una superficie de la mesa, una descripción de cada columna es el siguiente:

Tantas cosas que no podemos todos los interesados, sólo tienen que centrarse en dos:

  • Cpu Time/Call función de un mayor tiempo promedio de ejecución de la función; (larga función)
  • Call+Recur Calls/Total, Muy a menudo una función del número de llamadas.

Si usted encuentra que los anteriores dos indicadores extraordinaria, en particular el número de este tipo de llamadas, cada llamada tarda más tiempo del normal, y también ser capaz de escribir nuestro propio camino, entonces, básicamente, se puede determinar el punto óptimo.

Acerca de descubierto

El 如果屏幕的一片区域,在渲染的过程中,被绘制了太多次,则称为过度绘制concepto: .
Cómo comprobar:

La cifra es la interfaz de configuración del emulador Mumu, hacemos clic 显示过度绘制区域, se encuentra la interfaz ha cambiado de color:

De color de poca profundidad a lo profundo, más profundo, dibujo representa una transición será más grave. Por lo general tienen los siguientes colores:

  1. Blanco: ninguna de descubierto.
  2. Azul: Sobreestirar se duplicó. Píxeles extraen dos veces, a aceptar, pero si toda la interfaz son de color azul, a continuación, muestra que hay todavía atraídos a perder, puede guardar un empate.
  3. Verde: Sobreestirar dos veces. Tratando de optimizar.
  4. Luz roja: Sobreestirar tres veces.
  5. Oscuro: Sobreestirar cuatro veces. Muy grave y debe ser optimizado.

Cómo optimizar la transición a dibujar?

  1. Si, hay que considerar su código mediante la comprobación de drenaje excesivo y encontrado un gran número de complejos de descubierto por la pantalla de diseño  用自定义View自己去绘制.
  2. Si su diseño xml, hay una gran cantidad de anidación, consideran 去掉某些 background , porque no hay antecedentes, hilo de interfaz de usuario no va a hacer esta vez para dibujar
  3. Si usted tiene que utilizar el fondo hay la disposición, y luego considerar cumpliendo con las necesidades del negocio 减少一定的层级.

epílogo

El uso de las tres herramientas anteriores, la optimización del rendimiento de nuestra aplicación que se debe utilizar. Probablemente, la idea es la siguiente

1. systrace agarre archivos .html, observación gráficos, para averiguar la localización aproximada del marco
2. Trace.beginSection y Trace.endSection repitió la estimación, para determinar el bloque de código exactas
3. traceView registros de agarre .trace con DDMS abiertas que está mirando mucho la función de tiempo más largo o una función de la frecuencia para determinar la causa exacta de la pérdida de fotogramas

Tres herramientas necesitan ser utilizado en combinación con el fin de determinar nuestra aplicación específicamente lo que salió mal.

profundización de los temas

Este artículo sólo se da una idea general, no dio una demostración, que es demasiado a menudo debido a la optimización potencial de rendimiento, no podemos listarlos específicamente en lo que pasó, sólo para tener lugar después de que los resultados van por su propia herramienta detecta inferencia, para demostrar, a voluntad.

La optimización del rendimiento es interminable, siempre tiene que optimizar el espacio. En este artículo se da una dirección única guía aproximada, en particular, para optimizar y en qué medida, todo depende de que para la auto-reparación.

Los anteriores tres herramientas que se pueden utilizar para la optimización del rendimiento, pero su papel no es sólo para optimizar el rendimiento, no ven la madera. Por ejemplo systrace esta cosa, sólo se utiliza para comprobar la situación artículo anterior Caton pérdida de fotogramas, pero en realidad puede ver la CPU y la CPU programación de la asignación de múltiples núcleos, hilos también pueden comprobar el estado del hilo principal del interruptor y así sucesivamente.

Siguiente:内存抖动和泄漏的优化

Publicado 56 artículos originales · ganado elogios 1 · vistas 2919

Supongo que te gusta

Origin blog.csdn.net/chuhe1989/article/details/104478146
Recomendado
Clasificación