Tabla de contenido
Optimización de la aplicación:
introducción:
En primer lugar, haga una clasificación y clasificación sencillas de la optimización del rendimiento de Android. Debido a muchos factores que afectan el rendimiento, por ejemplo, las aplicaciones, la memoria, la red y los bloqueos clasificados en este artículo se afectan entre sí. Caton debería ser el problema de rendimiento más intuitivo y visible para los usuarios.
La optimización de la aplicación se centra en los tres aspectos del inicio, el dibujo de la interfaz de usuario y la optimización de recursos.
La optimización de la memoria se centra en la fluctuación de la memoria, las pérdidas de memoria y las consideraciones de expansión de la memoria.
La optimización de la red se considera desde los aspectos de solicitud de red y compresión de datos.
La optimización de los tres aspectos anteriores favorece la solución del problema de congelación de nuestro sistema. El usuario percibe intuitivamente la congelación que acabamos de mencionar. Desde la perspectiva de la visualización, el problema de congelación se debe a la pérdida de fotogramas. Este artículo no ampliará ni explicará el principio de actualización de la pantalla por el momento.
Optimización de la aplicación:
Optimización del diseño de la optimización de la interfaz de usuario (optimización del diseño, optimización del dibujo)
: RelativeLayout reemplaza a LinearLayout como el diseño raíz predeterminado. Reduzca los diseños anidados y mejore la eficiencia de representación Las
etiquetas <include> Las
etiquetas <ViewStub> cargan diseños poco comunes, retrasan la carga
Las etiquetas <merge> reducen los niveles de anidamiento del diseño
Optimización del paquete de instalación (optimización de archivos de recursos res)
reduce el volumen optimización del código de
recursos res Optimización: optimización de recursos lib: Ofuscación de código de optimización de recursos de activos Utilice la herramienta de ofuscación de código proGuard, que incluye compresión, optimización, ofuscación y otras funciones .
Inicio en frío, inicio en caliente, los subprocesos que consumen mucho tiempo utilizan subprocesos para ejecutarse
Lógica de inicio, lógica de carga,
los objetos no esenciales se pueden inicializar de manera perezosa,
no cree objetos estáticos globales, sino que cambie al modo singleton, de modo que el proceso de aplicación solo necesite inicializarse por primera vez.
Considere el marco de inyección de dependencia
Optimización de la red:
Fusione solicitudes de red, reduzca las solicitudes de red,
evite el análisis de DNS,
cargue una gran cantidad de datos, use
datos de red paginados, use compresión GZIP
para agregar caché de datos de red, evite solicitudes frecuentes a la red
para cargar imágenes y comprima imágenes cuando sea necesario
Optimización de la memoria:
Evite pérdidas de memoria: los objetos de larga duración se refieren a objetos de corta duración. Los objetos asignados en el montón ya no se utilizan, pero el recopilador de GC no puede reclamarlos.
Problema de variable estática: establezca la clase interna como una clase interna estática o use context.applicationContext() como
modo singleton de forma independiente: pase parámetros a la
propiedad context.getApplicationconText() animación: Activity.onDestroy llama a Animation.cancel()
Controlador: use estática clase interna + referencia débil de WeakReference; borre la cola de mensajes cuando la clase interna finalice su ciclo de vida Problema de subproceso
: configure AsyncTask y Runnable como clases internas estáticas o sepárelas, use referencias débiles dentro del subproceso para guardar el
recurso de referencia de contexto no está cerrado: incluso si se cierra cuando se destruye la actividad O cerrar sesión:
BroadcastReceiver llama a unregisterReceiver()
Cursor, flujo, archivo: llame a cerrar
Problema del adaptador:
vuelva a crear una instancia del elemento cada vez sin usar el caché y solo confíe en getView(), que creará presión sobre GC Utilice convertView Problema de WebView
al construir Adaptador : hay referencias estáticas en el mapa, etc., y no se realiza ninguna operación de eliminación
Ampliar la memoria: agregue el atributo largeHeap="true" a la aplicación en el archivo de manifiesto; la misma aplicación inicia varios procesos para ejecutarse, lo que puede aumentar el espacio de memoria total de la aplicación.
Optimización de catones:
No realice acceso a la red ni operaciones de E/S de archivos grandes en el hilo principal
Optimice el diseño
y optimice el dibujo: evite redibujar y sobredibujar innecesarios
enDraw No cree nuevos objetos locales.
No realice operaciones que requieran mucho tiempo en el método onDraw