En el desarrollo de Android, ¿existen herramientas que puedan solucionar problemas de pérdidas de memoria en la capa jni?
(1) Cuando opere objetos de mapa de bits, asegúrese de reciclarlos cuando no esté en uso
(2) Al acceder a la base de datos, asegúrese de cerrar el cursor
( 3) Para el código que involucra la capa JNI, dado que la capa JNI está escrita en C/C, usted mismo debe administrar la asignación/reciclaje de memoria, así que tenga cuidado.
Entonces, en el desarrollo de Android, ¿existe alguna forma efectiva de detectar el uso y las pérdidas de memoria?
Aquí hay tres métodos principales:
1. Información de registro del programa
Cuando el programa realiza la recolección de basura, imprimirá una información de registro (ventana logcat). ), por ejemplo:
D/dalvikvm(9050): GC_CONCURRENT liberó 2049K, 65 libres 3571K/9991K, externo 4703K/5261K, pausado 2ms 2ms
Preste atención al " 3571K /9991K", que representa el tamaño del montón utilizado por el programa. Si este valor sigue aumentando y nunca disminuye, significa que su programa tiene una pérdida de memoria.
2. Información del montón de DDMS
El entorno de desarrollo de Eclipse también proporciona una forma más intuitiva de ver la información del montón de la aplicación. El método de operación es el siguiente:
(1) Conecte el teléfono móvil y ejecute el programa, asumiendo que es el programa com.ticktick.test
(2) Haga clic en el botón DDMS y seleccione el programa que desea detectar (com. ticktick.test) en la ventana Dispositivo a la izquierda
(3) Haga clic en el segundo ícono (Actualizar montón) en la barra de herramientas de la ventana Dispositivo,
(4) Haga clic en el botón Causa GC en la ventana derecha para obtener la información del montón del programa actual
De manera similar, a medida que se ejecuta el programa, si el tamaño del montón obtenido mediante varios clics solo aumenta pero no disminuye, también indica que su programa tiene una pérdida de memoria. .
3. Utilice el comando adb para comprobar la información de la memoria.
De hecho, la forma más completa y sencilla es utilizar el comando adb para comprobar el uso de la memoria y las pérdidas de memoria del programa. Abra la ventana de línea de comando, adb El formato del comando es el siguiente:
adb shell dumpsys meminfo lt; package_namegt
Entre ellos, package_name también se puede reemplazar con pid. del programa, y el pid se puede encontrar a través de adb shell top | grep app_name. Ejecute el comando anterior en la ventana de línea de comando y el estado de la memoria de mi programa com.ticktick.test será el siguiente:
Hay mucha información obtenida aquí, concéntrese en los siguientes campos:
(1) Información del montón nativo/Dalvik
Específicamente en la primera y segunda líneas anteriores, dan la asignación de memoria de la capa JNI y la capa Java respectivamente. Si encuentra esto Si el valor sigue creciendo, significa que el programa puede tener una pérdida de memoria.
(2) Información total de PSS
Este valor es el tamaño de memoria real ocupado por su aplicación. A través de esta información, puede determinar fácilmente qué programas en el teléfono ocupan una mayor cantidad. memoria. .
4. Resumen
Esta es una breve introducción al uso de la memoria y la detección de pérdidas de memoria en el desarrollo de Android. Básicamente, los tres métodos anteriores se pueden utilizar para localizar problemas de pérdida de memoria. usando Bitmap, base de datos y programación C/C de capa JNI, solo preste atención. Además, si desea obtener más información sobre algunos de los detalles del artículo, puede consultar los dos artículos proporcionados oficialmente por Google. Tienen discusiones más detalladas sobre "Investigar el uso de RAM" y "Administrar la memoria de su aplicación". Si tiene alguna pregunta o punto que no está claro, puede dejar un mensaje o escribir a lujun.hust@gmail.com para comunicarse.