¿Excepción de Android para manejar las mejores prácticas?

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 “locking” del que estaba hablando originalmente). Creo que como todo ahora es código nativo, el locking ocurre instantáneamente junto con la obtención de toda la información del locking. 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).

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…

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