loading...

jueves, 9 de diciembre de 2010

Motorola Android. Llegar al fondo de los errores de memoria con MOTODEV Studio

Llegar al fondo de los errores de memoria con MOTODEV Studio

por Eric Cloninger (EricC) en 12/02/2010 11:42 - editado por última vez el 12/03/2010 24:08
03 de diciembre 2010 - Blog de software de alojamiento Nuestro está teniendo problemas con los enlaces de imagen en este artículo. Hemos presentado un informe de error para que lo resuelva. Pedimos disculpas por los problemas. Eric

Episodio IV - Una nueva esperanza

Una de las promesas de Java, hacia 1996, fue que los problemas de la memoria sería resuelto por un recolector de basura que era más inteligente que nosotros. Si bien la recolección de basura se resuelve muchos de los problemas que hicieron que nuestra vida más difícil, no es de bala de plata que mata a la bestia. Problemas con la memoria todavía existen y la naturaleza opaca de la memoria de Java en realidad hace que el proceso de depuración más difícil. MOTODEV Studio ayuda a aliviar parte de esta dificultad mediante la inclusión de una herramienta de análisis de memoria común que se llama MAT.

MAT, o el "Memory Analyzer", es un proyecto de Eclipse que fue desarrollado en código abierto por committers de IBM y SAP. MAT lee la salida del comando estándar de Java HPROF y muestra los resultados de una manera que puede ser interpretada por los seres humanos.

El equipo de MOTODEV Studio hecho algunos ajustes a la MAT para que sea más fácil para los desarrolladores de Android de usar, pero la mayor parte de esta funcionalidad viene de los plugins existentes MAT o ADT plugin de Google. El wiki MAT tiene algunas preguntas frecuentes de base, pero el mejor artículo que he encontrado sobre la manera de revisar y entender los resultados está disponible en el sitio web de SAP.

Comience en el inicio

Los pasos siguientes describen una forma de realizar esta tarea. Hay muchas maneras de conseguir el trabajo hecho con Eclipse, así que si esta no coincide con su propio flujo de trabajo, usted debería ser capaz de adaptar estas instrucciones para satisfacer sus necesidades. Le sugiero que ejecute estas instrucciones una vez con su aplicación en un estado estable, como en la actividad principal. Lea los resultados y tratar de comprender de qué objetos son creados por el sistema operativo y las clases base. HPROF genera mucha información para que usted necesita aprender la habilidad de detectar la aguja en el pajar . De lo contrario, podría perder el tiempo mirando a resultados que no son particularmente interesantes o útiles. Tenga en cuenta que HPROF toma una instantánea de las condiciones actuales y no controla la ejecución en el tiempo, es posible que deba ejecutar \ estos pasos varias veces para identificar los problemas que surgen.

  1. Poner en marcha un dispositivo virtual de Android (AVD) usando el MOTODEV Studio Device Management punto de vista, se muestra a continuación. Usted puede utilizar MAT y MOTODEV Studio con un emulador o un dispositivo real, pero si usted está utilizando su teléfono personal para la depuración, siempre debe asegurarse de que sus datos respaldados. A partir de ahora, voy a utilizar el término "dispositivo", lo que podría ser un teléfono físico o un emulador.

    1-msd_devmgmt.png

  2. Haga clic derecho sobre el proyecto que contiene su aplicación en el Explorador de paquetes y seleccioneEjecutar como-> Android aplicación utilizando MOTODEV Studio . Este paso copia de su aplicación para el dispositivo y se pone en marcha.
  3. Ejercicio de la interfaz de usuario de su aplicación hasta el punto donde se sospecha que las fugas se producen.Recuerde que la naturaleza instantánea de HPROF, por lo que desea recoger los datos lo más cerca posible al lugar problema.
  4. Cambie a la administración de dispositivos de vista, haga clic derecho sobre el dispositivo que se está probando, y elija la memoria Analizar con MAT , como se muestra a continuación

    2-devmgmt_popup_mat.png

  5. A continuación, seleccione la aplicación que desea observar y pulse Finalizar

    3-analyze_dialog.png

  6. En este punto, HPROF se apaga y realiza su análisis. Este proceso dura unos 15 segundos, dependiendo de la velocidad del ordenador y la carga en el dispositivo. Si bien se puede poner este cuadro de diálogo en el fondo, es probable que se termine antes de tener la oportunidad de hacerlo.

    4-mat_progress.png

  7. Cuando HPROF es completa, transfiere un archivo a su computadora. Este archivo se almacena en el directorio referenciado por la variable de entorno TEMP. Después de que se almacena, se le indica a continuación el cuadro de diálogo, preguntando cómo procesar los resultados. Ya que estamos interesados en la búsqueda de fugas, elija la primera opción.

    5-MAT_getting_started.png

  8. En el gráfico se muestra a continuación es un ejemplo de lo que va a ver en los TMA. Se ha identifica varios posibles culpables de causar las fugas que vemos. La tabla tiene enlaces que le permiten perforar más profundo en cada una de las áreas problema y le permiten explorar los elementos de datos individuales.

    6-mat_chart.png

    Como mencioné al principio, habrá algunos falsos positivos en los resultados y es muy útil saber cuáles son causados por el marco y los que vienen desde el código. En mi caso, el problema era en realidad el segundo candidato, como se muestra a continuación.

    7-leak_found.png
  9. Hay maneras de profundizar en los resultados y ver realmente el contenido de la memoria que fue asignada.Desde la barra de herramientas en la parte superior de los resultados de MAT, haga clic en el icono de la extrema derecha, con una foto de un Android en él. Esto filtra los resultados para su aplicación y permite examinar la memoria en mayores detalles.

    8-mat_chart_toolbar.png

  10. Si usted encuentra que usted desea ir más de los resultados de una ejecución anterior, puede hacerlo en cualquier momento. Sólo tiene que usar Archivo-> Abrir para localizar y abrir el archivo con el sufijo HPROF. en la carpeta TEMP. Esto hará que el analizador a correr de nuevo con los resultados que previamente capturados.
El Bueno, el Malo y el Feo (y la solución)

Tan útil como HPROF y los TMA son, este es un método inexacto. HPROF sólo funciona en un momento específico en el tiempo, no a través de la vida de su aplicación. Usted podría ejecutar HPROF dos veces en rápida sucesión y obtener resultados muy diferentes. La aleatoriedad del recolector de basura hace que encontrar el momento en que los problemas surgen a ser no-determinista. Un truco que he visto usar a los desarrolladores es poner a dormir () En los estados en el código en puntos específicos. Una vez que lleguen a la declaración del sueño, que tengan tiempo de cambiar a MOTODEV Studio tiempo suficiente para activar la captura de datos.

La herramienta correcta para el trabajo

MAT es una herramienta útil y puede ser una parte esencial de un flujo de trabajo de diagnóstico. Se necesita la aportación de HPROF y la muestra de una manera que usted puede seguir las cuestiones de asignación de memoria. No hace un seguimiento del uso de la API y no le dirá que los procesos están usando demasiado de la CPU. Sin embargo, utilizado correctamente, puede ayudarle a crear un más rápido y más eficiente aplicación.

Buena suerte con sus aplicaciones móviles y gracias por utilizar MOTODEV Studio.