He estado trabajando en una aplicación de Android que se usa con try/catch
frecuencia para evitar que se bloquee incluso en lugares donde no es necesario. Por ejemplo,
Una vista xml layout
con id = toolbar
se hace referencia como:
// see new example below, this one is just confusing
// it seems like I am asking about empty try/catch
try {
View view = findViewById(R.id.toolbar);
}
catch(Exception e) {
}
Este enfoque se utiliza en toda la aplicación. El seguimiento de la pila no se imprime y es muy difícil encontrar qué salió mal. La aplicación se cierra repentinamente sin imprimir ningún rastro de pila.
Le pedí a mi superior que me lo explicara y me dijo:
Esto es para prevenir fallas en la producción.
Estoy totalmente en desacuerdo con eso . Para mí, esta no es la forma de evitar que las aplicaciones se bloqueen. Muestra que el desarrollador no sabe lo que está haciendo y tiene dudas.
¿Es este el enfoque que se utiliza en la industria para evitar fallas en las aplicaciones empresariales?
Si try/catch
es realmente, realmente nuestra necesidad, ¿es posible adjuntar un controlador de excepciones con el hilo de la interfaz de usuario u otros hilos y capturar todo allí? Ese será un mejor enfoque si es posible.
Sí, vacío try/catch
es malo e incluso si imprimimos el seguimiento de la pila o la excepción de registro en el servidor, encapsular bloques de código try/catch
aleatoriamente en toda la aplicación no tiene sentido para mí, por ejemplo, cuando cada función está incluida en un try/catch
.
ACTUALIZAR
Como esta pregunta ha recibido mucha atención y algunas personas la han malinterpretado (tal vez porque no la he redactado claramente), la voy a reformular.
Esto es lo que hacen los desarrolladores aquí
Una función está escrita y probada , puede ser una función pequeña que simplemente inicializa vistas o una función compleja, después de probarla se envuelve alrededor del
try/catch
bloque. Incluso para una función que nunca arrojará ninguna excepción.Esta práctica se utiliza en toda la aplicación. En ocasiones, se imprime el seguimiento de la pila y, en ocasiones, solo aparece un
debug log
mensaje de error aleatorio. Este mensaje de error difiere de un desarrollador a otro.Con este enfoque, la aplicación no se bloquea, pero el comportamiento de la aplicación se vuelve indeterminado. Incluso a veces es difícil seguir lo que salió mal.
La verdadera pregunta que he estado haciendo fue; ¿Es la práctica que se sigue en la industria para prevenir fallas en las aplicaciones empresariales? y no estoy preguntando por try / catch vacío . ¿Es como que a los usuarios les encantan las aplicaciones que no fallan que las aplicaciones que se comportan inesperadamente? Porque realmente se reduce a bloquearlo o presentar al usuario una pantalla en blanco o el comportamiento que el usuario desconoce.
Estoy publicando algunos fragmentos del código real aquí.
private void makeRequestForForgetPassword() { try { HashMap<String, Object> params = new HashMap<>(); String email= CurrentUserData.msisdn; params.put("email", "blabla"); params.put("new_password", password); NetworkProcess networkProcessForgetStep = new NetworkProcess( serviceCallListenerForgotPasswordStep, ForgotPassword.this); networkProcessForgetStep.serviceProcessing(params, Constants.API_FORGOT_PASSWORD); } catch (Exception e) { e.printStackTrace(); } } private void languagePopUpDialog(View view) { try { PopupWindow popupwindow_obj = popupDisplay(); popupwindow_obj.showAsDropDown(view, -50, 0); } catch (Exception e) { e.printStackTrace(); } } void reloadActivity() { try { onCreateProcess(); } catch (Exception e) { } }
No es un duplicado de las mejores prácticas de manejo de excepciones de Android , OP está tratando de detectar la excepción para un propósito diferente al de esta pregunta.
catch(Exception e){}
- este comentario tenía sentido antes de la edición de la pregunta