java - para - manual de programacion android pdf
¿Excepción de Android para manejar las mejores prácticas? (3)
Aquí, busca el enlace para referencia .
Aquí crea una clase, dice ExceptionHandler que implements java.lang.Thread.UncaughtExceptionHandler
..
Dentro de esta clase, harás las cosas para salvar tu vida, como crear stacktrace y prepararte para cargar informes de errores, etc.
Ahora viene la parte importante, es decir, cómo atrapar esa excepción. Aunque es muy simple. Copie la siguiente línea de código en cada actividad justo después de la llamada de onCreate
en su método onCreate
modificado.
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
Tu actividad puede parecerse a esto ...
public class ForceClose extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
setContentView(R.layout.main);
}
}
Espero que esto ayude...
Si mi aplicación falla, se cuelga por un par de segundos antes de que Android me informe que la aplicación se bloqueó y debe cerrarse. Así que estaba pensando en detectar todas las excepciones en mi aplicación con un general:
try {
// ...
} catch(Exception e) {
// ...
}
Y realice una nueva Activity
que explique que la aplicación se bloqueó al instante (y también le dio a los usuarios la oportunidad de enviar un correo con los detalles del error), en lugar de tener esa demora gracias a Android. ¿Hay mejores métodos para lograr esto o esto se desaconseja?
Actualización: estoy usando un Nexus 5 con ART habilitado y no estoy notando el retraso que solía experimentar con las aplicaciones que se bloquea (el "bloqueo" del que estaba hablando originalmente). Creo que como todo ahora es código nativo, el bloqueo ocurre instantáneamente junto con la obtención de toda la información del bloqueo. Quizás el Nexus 5 sea rápido :) independientemente, esto puede no ser una preocupación en versiones futuras de Android (dado que ART va a ser el tiempo de ejecución predeterminado en Android L).
Puede usar un cuadro de diálogo de alerta genérico para mostrar rápidamente los mensajes de error. Por ejemplo...
//******************************************
//some generic method
//******************************************
private void doStuff()
{
try
{
//do some stuff here
}
catch(Exception e)
{
messageBox("doStuff", e.getMessage());
}
}
//*********************************************************
//generic dialog, takes in the method name and error message
//*********************************************************
private void messageBox(String method, String message)
{
Log.d("EXCEPTION: " + method, message);
AlertDialog.Builder messageBox = new AlertDialog.Builder(this);
messageBox.setTitle(method);
messageBox.setMessage(message);
messageBox.setCancelable(false);
messageBox.setNeutralButton("OK", null);
messageBox.show();
}
También puede agregar otras opciones de manejo de errores en este método, como print stacktrace
encontré el método "wtf" (qué terrible error) en la clase Log. De la descripción:
Dependiendo de la configuración del sistema, se puede agregar un informe al DropBoxManager y / o el proceso puede finalizar inmediatamente con un cuadro de diálogo de error.
http://developer.android.com/reference/android/util/Log.html
Espero que esto ayude a alguien