Optimización del rendimiento de Android: una guía práctica detallada para la optimización del diseño, tan importante

prefacio

Para los desarrolladores de Android, dominar las habilidades básicas de desarrollo de aplicaciones está lejos de ser suficiente. Ya sea en el trabajo o durante una entrevista, tener un conocimiento sólido de la optimización del rendimiento es fundamental para mejorar la experiencia de su aplicación. La optimización del rendimiento de Android cubre principalmente los siguientes aspectos: optimización de inicio, optimización de renderizado, optimización de memoria, optimización de red, detección y optimización de congelación, optimización del consumo de energía, optimización del tamaño del paquete de instalación y problemas de seguridad. El siguiente es un resumen de la optimización del rendimiento de Android basado en el intercambio de experiencias de muchos peces gordos en Internet.

inserte la descripción de la imagen aquí

Hay muchas soluciones para la optimización del rendimiento de Android.Durante el proceso de desarrollo, se consideran principalmente las siguientes optimizaciones:

  • optimización de diseño
  • optimización de dibujo
  • Optimización de pérdida de memoria
  • Optimización de la velocidad de respuesta
  • Optimización de vista de lista
  • Optimización de mapa de bits
  • optimización de subprocesos

A continuación, presentamos brevemente el esquema de optimización desde estos aspectos.

optimización de diseño

Todos deben saber que hay muchos diseños en Android, como Linerlayout, RelativeLayout, etc. La optimización del diseño consiste en reducir el nivel del archivo de diseño. Si se reduce el nivel, el programa dibujará mucho más rápido, por lo que puede mejorar el rendimiento.

En el código de diseño, qué diseño usar básicamente sigue las siguientes reglas:

  • Si tanto LinearLayout como RelativeLayout se pueden usar en el diseño, entonces se usa LinearLayout porque las funciones de RelativeLayout son más complicadas y su proceso de diseño requiere más tiempo de CPU.
  • Si el diseño debe hacerse de forma anidada. En este caso, se recomienda utilizar RelativeLayout, porque el anidamiento de ViewGroup equivale a aumentar el nivel de diseño, lo que también reducirá el rendimiento del programa.

3. Use etiquetas o y ViewStub para extraer el diseño de la parte común del diseño, lo que puede mejorar la eficiencia de la inicialización del diseño.

optimización de dibujo

La optimización del dibujo no consiste en realizar muchas operaciones en el método onDraw de la vista.

En primer lugar, no cree nuevos objetos en el método onDraw, ya que es posible que se llame con frecuencia al método onDraw, lo que generará una gran cantidad de archivos temporales, lo que provocará un uso excesivo de la memoria y una reducción de la eficiencia de la ejecución del programa.

En segundo lugar, no realice operaciones que consuman mucho tiempo tanto como sea posible, y una gran cantidad de bucles también consumirán tiempo de CPU

Optimización de pérdida de memoria

Optimización de fugas de memoria En otras palabras, qué situaciones pueden causar fugas de memoria, creo que todos lo tienen claro, porque esta también es una pregunta clásica de entrevista para principiantes. Se dan principalmente las siguientes situaciones:

  • No declare variables estáticas en la actividad, de modo que la actividad no se pueda destruir y liberar por completo
  • La pérdida de memoria con el patrón de diseño de singleton, la naturaleza estática del patrón de diseño de singleton hará que su ciclo de vida sea tan largo como el ciclo de vida de la aplicación, lo que significa que si un objeto ya no está en uso y el objeto de singleton todavía tiene una referencia al objeto, entonces el GC no podrá reciclar el objeto, lo que resultará en una pérdida de memoria. Entonces, cuando se usa el modo singleton, el contexto entrante debe usar ApplicationContext
  • Fugas de memoria causadas por instancias estáticas creadas por clases internas no estáticas
  • Para pérdidas de memoria causadas por Handler, no use clases internas anónimas no estáticas para referirse a Handlder en Actividad, por ejemplo:
public class MainActivity extends AppCompatActivity {
    
    
    private Handler mHandler = new Handler() {
    
    
        @Override
        public void handleMessage(Message msg) {
    
    
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        loadData();
    }
    private void loadData(){
    
    
        Message message = Message.obtain();
        mHandler.sendMessage(message);
    }
}

De esta manera, el manejador mantendrá una referencia a la actividad, y el manejador se ejecuta en un subproceso Looper, y el subproceso Looper sondea para procesar mensajes en la cola de mensajes Supongamos que procesamos 10 mensajes, y cuando llega al sexto mensaje, el usuario sale y destruye la actividad actual.

Optimización de la velocidad de respuesta

La idea central de la optimización de la velocidad de respuesta es evitar operaciones que consuman mucho tiempo en el hilo principal. Android estipula que si la Actividad no responde a los eventos táctiles de la pantalla o los eventos de entrada del teclado dentro de los 5 segundos, se producirá ANR. Si BroadcastReceiver es de 10 segundos, el tiempo de Servicio es de 20 segundos. Por supuesto, este es un evento de pequeña probabilidad. Si no se refleja dentro del tiempo correspondiente, se producirá ANR. Cuando hay una operación que consume mucho tiempo, se puede abrir un subproceso por separado para la operación.

optimización de vista de lista

Creo que todo el mundo está familiarizado con la optimización de vista de lista. También es una pregunta clásica de entrevista. No entraré en detalles aquí. Incluye principalmente la reutilización de vistas. Primero, juzgue si la vista está vacía.

Optimización de mapa de bits

De hecho, la idea también es muy simple, es usar BitmapFactory.Options para cargar la imagen del tamaño requerido. Aquí se supone que la imagen se muestra a través de ImageView. En muchos casos, ImageView no es tan grande como el tamaño original de la imagen. En este momento, la imagen completa se carga y luego se establece en imageView. Esto es obviamente innecesario, porque ImageView no tiene forma de mostrar la imagen original. A través de BitmapFactory.Options, la imagen reducida se puede cargar de acuerdo con una determinada frecuencia de muestreo, y la imagen reducida se puede mostrar en ImageView, lo que reducirá el uso de memoria y evitará OOM hasta cierto punto, y mejorará el rendimiento de la carga de mapa de bits.

optimización de subprocesos

La idea de la optimización de subprocesos es utilizar un grupo de subprocesos para evitar una gran cantidad de subprocesos en el programa. El grupo de subprocesos puede reutilizar los subprocesos internos, evitando así la sobrecarga de rendimiento causada por la creación y destrucción de subprocesos.Al mismo tiempo, el grupo de subprocesos puede controlar de manera efectiva el número máximo de simultaneidad del grupo de subprocesos y evitar la ocurrencia del fenómeno de bloqueo causado por una gran cantidad de subprocesos que se apropian entre sí de los recursos del sistema. Por lo tanto, en el desarrollo real, deberíamos intentar usar el grupo de subprocesos en lugar de crear un objeto Subproceso cada vez.

inserte la descripción de la imagen aquí

Optimización del rendimiento de Android

aspectos teóricos

Hay muchos puntos de conocimiento involucrados en la optimización del rendimiento de Android. Además de las soluciones comunes mencionadas anteriormente, los principios subyacentes también son dignos de nuestra discusión en profundidad. Además, hay monitoreo del rendimiento y el uso de herramientas . Basándome en mi experiencia de desarrollo de Android, compilé los principios subyacentes de estas optimizaciones de rendimiento, soluciones a varios problemas y esquemas de conocimiento en materiales. Espero poder ayudarlos.

Resumen del contenido: "Capítulo práctico de optimización del rendimiento de Android"; Optimización integral del rendimiento de 360°.

Características del contenido: organización clara, incluida la representación gráfica, que es más fácil de entender.

Debido al gran contenido del artículo y al espacio limitado, la información se ha organizado en un documento PDF. Si necesita "Optimización del rendimiento de Android en la práctica" y un documento completo de ajuste de rendimiento integral de 360° , ¡puede escanear la tarjeta a continuación para obtenerlo!

## **"Capítulo práctico de optimización del rendimiento de Android"**

Tabla de contenido

imagen

imagen

Supongo que te gusta

Origin blog.csdn.net/Android23333/article/details/131372131
Recomendado
Clasificación