PDA

Ver la versión completa : [TUTORIAL] Mamá, ¡tengo un Provocar acercamiento [ ForceClose]en mi Android!



EliteDrOiD
10/03/2011, 23:20:50
http://img815.imageshack.us/img815/3680/mamafc.png

Como usuarios de terminales android, una de las peores cosas que sufrimos a diario son esas molestas ventanitas que aparecen sin previo aviso y que hacen que la aplicación que estamos usando se cierre inesperadamente dejándonos con un amargo sabor de boca.
Hoy me gustaría mostraros a todos los lectores algunas nociones del por qué ocurren, saber sus motivos, cómo paliar sus efectos y cómo solucionarlos (o contribuir a su solución) de forma eficaz.

ANR vs FC

Android dispone de 2 mecanismos de “defensa” para que el sistema no se bloquee/estropee ante una aplicación defectuosa o un evento temporal descontrolado:
ANR (Aplicación No Responde):

http://img848.imageshack.us/img848/2706/losentimos.png

Por qué ocurre:

Las aplicaciones de android realizan una gran cantidad y variedad de tareas, algunas de ellas (como por ejemplo cargar una serie de imágenes) dejan la aplicación en un estado de “espera” mientras se ejecutan que no es el idóneo (por mala conceptualización del programador, porque estamos haciendo muchas cosas a la vez y el procesador del terminal no puede con todas, etc).
Durante este período, si el sistema detecta que nuestros dedos inquietos están toqueteando la pantalla sin recibir respuesta alguna de la aplicación en ejecución, o simplemente detecta que la aplicación lleva demasiado tiempo en dicho estado, nos mostrará un mensaje advirtiéndonos de que la aplicación no responde apropiadamente y dándonos dos opciones: “Forzar cierre” o “Esperar”.
Cómo identificarlo:

Si alguna vez te aparece este mensaje, pulsa “Esperar” una vez. Si no te vuelve a aparecer, seguramente no sea un fallo del programa, sino que al terminal le entró un poco de “hipo” durante unos instantes y se atragantó con tantos quehaceres simultáneos.
Sin embargo, si al cabo de unos segundos tras darle a “Esperar” vuelve a aparecer, pulsa “Forzar cierre” y vuelve a abrir la aplicación. Trata de encontrar la opción/función/acción de dicha aplicación que al realizarla nos muestra esa advertencia de nuevo.
Cómo solucionarlo:

A veces, por mucho que uses una aplicación, no tendrás ningún tipo de problema, y de pronto un día te aparece el mensaje. Esto no quiere decir que tu teléfono esté estropeado, ni que la aplicación sea defectuosa. Simplemente puede que la casualidad haya hecho que se produzcan una serie de eventos en tu teléfono que hagan que la aplicación en un momento dado, deje de responder durante unos segundos.
En cambio, si logras detectar un patrón de conducta en tu aplicación que desencadene este mensaje (por ejemplo, siempre que pulses ciertos botones en cierto orden, o siempre que abras la opción “X”) habrás descubierto un pequeño fallo en la aplicación.
La mayoría de desarrolladores de aplicaciones estarán encantados de que les envíes un email detallándoles ese patrón y los efectos nocivos que tiene para su aplicación en tu teléfono.
FC (Forzar Cierre o Force Close):

http://img849.imageshack.us/img849/9359/losentimos2.png

Por qué ocurre:

Cuando el sistema detecta un error no controloado por el programador en una aplicación, se nos muestra una ventana con una única opción: “Forzar cierre” (o 2 opciones si nuestro terminal usa la versión 2.2 de android: “Forzar cierre” o “Enviar informe”).
En estos casos no podemos hacer nada más, la aplicación se cerrará inexorablemente debido a dicho error.
Cómo identificarlo:

Identificar que hay un FC es sencillo, si vemos ese mensaje y nuestra aplicación se cierra, es que algo no marcha bien. Pero, ¿te gustaría saber por qué ha ocurrido ese error? Quizá sabiendo el motivo, o al menos haciéndote una idea de la causa probable, sientas menos esa “ira incontrolable” que padece cualquier usuario cuando su aplicación favorita comienza a fallar de esa forma: el “LOG” (lee más adelante cómo obtenerlos).
Si abres un log verás muchísima información a priori ininteligible. Si tienes un rato y te apetece investigar, busca en dicho log las palabras “Exception” o “Error”. Suelen aparecer acompañadas de muchas líneas similares a ésto:
W/System.err(21873)at android.app.ActivityThread.performPauseActivity(Ac tivityThread.java:3149)
Esas líneas son las que ayudarán al desarrollador de turno a arreglar su aplicación, y normalmente el error suele aparecer al inicio de esas líneas y ser bastante descriptivo: FileNotFoundException, OutOfMemoryError, NullPointerException…
Como ves, un FC puede estar originado en muchísimas pequeñas cosas, así que si te ocurre alguna vez, ¡no tires el terminal por la ventana aún!
Cómo solucionarlo:

Estos errores se pueden producir por un número indeterminado de motivos, algunos de los cuales serán insalvables hasta que el desarrollador de la aplicación lo corrija y libere la actualización. Pero en algunas ocasiones, un par de pruebas rápidas pueden transformar nuestra “ira incontrolable hacia el desarrollador” en un simple “mosqueo leve”.
Primer intento: forzar detención y limpiar posibles “cachés” de información

http://img834.imageshack.us/img834/6162/clearcache121x182.png

1-Ve a la pantalla de configuración de tu terminal y busca la opción “Aplicaciones”
2-Dentro de “Aplicaciones” ve a “Administrar aplicaciones”
3-Busca la aplicación que te está causando problemas y ábrela (dependiendo de la versión de android que tengamos en nuestro terminal, aparecerán diferentes pestañas para elegir las aplicaciones descargadas, las que están en ejecución o todas, o quizá tengas que pulsar la tecla “menú” del teléfono, elegir “Filtrar” y seleccionar “Todas” para que aparezca)
4-Pulsamos el botón “Forzar detención” para asegurarnos de que nuestra aplicación está cerrada y a continuación el botón de “Borrar caché” (OJO, no confundir con “Borrar datos”!!!, la caché son datos temporales que usa la aplicación y que pueden ser eliminados sin mayores perjuicios)
5-Volvemos a abrir nuestra aplicación y repetimos los pasos que nos llevaron a obtener el FC a ver si se ha solucionado.
Segundo intento: Reinstalar/borrar datos

Sigue los mismos pasos que en el primer intento pero esta vez pulsa el botón de “Borrar datos” en lugar de “Borrar caché”. Esto dejará tu aplicación como recién instalada (sí, perderás los datos de tu aplicación, de ahí que este sea el segundo intento y no el primero).
Si tu aplicación no tiene activo el botón de “Borrar datos”, el remedio que queda es desinstalarla y volver a instalarla.
Tercer intento: reportar el error.

http://img852.imageshack.us/img852/654/alogcat121x182.png


Aunque en Android 2.2 (Froyo) los mensajes de FC vienen acompañados con una opción de “Reportar” automáticamente el error al desrrollador, mi experiencia como tal me ha hecho ver que este tipo de informes suelen carecer de detalles importantes para la correcta determinación de los errores y las posibles formas de solucionarlos. Por eso voy a aconsejaros que ante este tipo de situaciones, realicéis los siguientes pasos:
1-Instala algún programa que permita la lectura y revisión de “logs” del sistema (os aconsejo aLogcat, Bug reporter o Catlog, gratuitos en el Market)
2-Cuando tu aplicación favorita te regale un FC, inicia el programa gestor de logs.
3-Dependiendo de la aplicación usada, pulsando menú o un botón tendrás la opción de enviar el log directamente.
4-Envíaselo al desarrollador (suelen indicar un email de contacto en la ficha de la aplicación en el Market) indicándole si es posible tu modelo de teléfono, la versión de android que usas, y los pasos que realizaste en su aplicación para obtener el FC.
Con estos sencillos pasos estarás contribuyendo enormemente a que la aplicación sea arreglada/mejorada, ¡y cuesta lo mismo que ir al Market y poner “verde” al desarrollador de turno!
Espero que este post haya sido de utilidad para todos aquellos usuarios ávidos de conocimiento y de ganas de mejorar sus aplicaciones favoritas!
--------------------------------------------------