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 eclipse
tiempo, 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 estewm
Dentro WindowManager registro contiene información WindowManagergfx
Gráficos de registro contiene información gráfica de representacióninput
registro de entrada contiene información de dispositivo de entradaview
Ver la información de registro incluido en la vista de sistemas Sistemasched
La información de programación de la CPU programación incluye un registro de la CPUfreq
registro de frecuencia de la CPU contiene información
Aquí está la cisterna;
En una máquina real, por ejemplo
vivo X7
, se generará unhtml
archivo 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
G
teclas, 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 sobre16.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 bitmap
opinió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
description
medios:修改/新绘制的位图必须上传到GPU。因为如果上传的总像素量很大,这是很昂贵的,所以每帧减少这个动画/上下文中位图的波动量。
El segundo párrafo
description
de 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 systrace
el gráfico, haga clic en el cuadro rojo por encima de la zona, que será en el systrace
que 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:
- Blanco: ninguna de descubierto.
- 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.
- Verde: Sobreestirar dos veces. Tratando de optimizar.
- Luz roja: Sobreestirar tres veces.
- Oscuro: Sobreestirar cuatro veces. Muy grave y debe ser optimizado.
Cómo optimizar la transición a dibujar?
- 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自己去绘制
.- 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- 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.