Resumen de problemas de Android ANR

1.traza el análisis de archivos

La información de la pila ANR se envía al archivo /data/anr/traces.txt

2. Tres problemas comunes

El hilo principal está bloqueado y no hay respuesta para 5s de eventos de entrada, como el evento onClick.

b.BroadcastReceiver se ejecuta en el subproceso principal del programa y el tiempo de ejecución de BroadcastReceiver es de 10 segundos de forma predeterminada.

c. El servicio es un componente informático. Aunque se ejecuta en segundo plano, esencialmente se ejecuta en el hilo principal. Si su servicio necesita realizar operaciones intensivas de CPU (como la reproducción de MP3) o de bloqueo (como la red), debe En el subproceso secundario, de lo contrario, se necesitan más de 20 segundos para causar anr.

3. Otras razones

La CPU es intensiva, lo que hace que el hilo principal no pueda aprovechar los segmentos de tiempo de la CPU, preste atención a los procesos con un alto uso de la CPU
b
. La memoria baja (memoria baja), como memoria insuficiente, hace que el bloque cree un mapa de bits
. Un punto muerto activa ANR, y el hilo no principal retiene el objeto de bloqueo requerido por el hilo principal, haciendo que el hilo principal espere un tiempo de espera. Por lo general, el registro tendrá los siguientes campos Bloqueado | bloqueado | esperando a bloquearse | retenido por hilo, en este momento la mayor parte de la CPU está inactiva y la tasa de uso es muy baja
. e. El proceso de aplicación actual realiza la comunicación entre procesos para solicitar otros procesos. La operación de otros procesos no tiene retroalimentación durante mucho tiempo, como operar el hardware Cámara
f .El número de carpeta de servicio alcanza el límite superior
g. Dispare WatchDog ANR en system_server

4. Cómo evitar el ANR

a. Nunca realice operaciones complejas y que consuman mucho tiempo en el hilo principal, como enviar y recibir datos de la red, realizar grandes cantidades de cálculos, operar bases de datos, leer y escribir archivos, etc., todo utilizando operaciones asincrónicas.
b.broadCastReceiver Para realizar operaciones complejas, puede iniciar un IntentService o JobIntentService en el método onReceive () para hacerlo.
La operación que consume mucho tiempo en c.Service también es mejor usar tareas asincrónicas.
d) Evite situaciones inapropiadas como sincronización / punto muerto y bucle muerto en la etapa de diseño y escritura de código.

5. Análisis de registro

: : Bloqueado | - bloqueado | esperando para bloquear | retenido por hilo | ANR en | ANRManager: Motivo

Publicado 142 artículos originales · elogiado 258 · 160,000 visitas

Supongo que te gusta

Origin blog.csdn.net/conconbenben/article/details/105329095
Recomendado
Clasificación