J'ai travaillé sur une application Android qui utilise fréquemment try/catch
pour éviter les plantages même à des endroits où ce n'est pas nécessaire. Par exemple,
Une vue dans layout xml
avec id = toolbar
est référencée de la manière suivante :
// voir nouvel exemple ci-dessous, celui-ci est juste confus
// on dirait que je parle de try/catch vide
try {
View view = findViewById(R.id.toolbar);
}
catch(Exception e) {
}
Cette approche est utilisée dans toute l'application. La trace de la pile n'est pas imprimée et il est vraiment difficile de trouver ce qui a mal tourné. L'application se ferme soudainement sans afficher de trace de la pile.
J'ai demandé à mon supérieur de m'expliquer et il a dit,
C'est pour éviter les plantages en production.
Je ne suis pas du tout d'accord avec cela. Pour moi, ce n'est pas la façon d'éviter les plantages d'applications. Cela montre que le développeur ne sait pas ce qu'il fait et est dans le doute.
Est-ce que cette approche est utilisée dans l'industrie pour éviter les plantages des applications d'entreprise?
Si try/catch
est vraiment, vraiment nécessaire, est-il possible d'attacher un gestionnaire d'exceptions au thread UI ou à d'autres threads et de tout attraper là-bas? Ce serait une meilleure approche si possible.
Oui, un try/catch
vide est mauvais et même si nous imprimons la trace de la pile ou enregistrons l'exception sur le serveur, envelopper des blocs de code dans des try/catch
de façon aléatoire à travers toute l'application n'a aucun sens pour moi, par exemple quand chaque fonction est incluse dans un try/catch
.
MISE À JOUR
Comme cette question a attiré beaucoup d'attention et que certaines personnes l'ont mal interprétée (peut-être parce que je ne l'ai pas formulée clairement), je vais la reformuler.
Voici ce que font les développeurs ici
-
Une fonction est écrite et testée, cela peut être une petite fonction qui initialise simplement des vues ou une fonction complexe, après les tests elle est enveloppée d'un bloc
try/catch
. Même pour des fonctions qui ne lèveront jamais d'exception. -
Cette pratique est utilisée dans toute l'application. Parfois la trace de la pile est imprimée et parfois juste un
debug log
avec un message d'erreur aléatoire. Ce message d'erreur varie d'un développeur à l'autre. -
Avec cette approche, l'application ne plante pas mais le comportement de l'application devient indéterminé. Parfois il est même difficile de comprendre ce qui a mal tourné.
-
La vraie question que je pose est ; Est-ce la pratique suivie dans l'industrie pour éviter les plantages des applications d'entreprise? et je ne parle pas de try/catch vide. Est-ce comme si les utilisateurs préféraient une application qui ne plante pas à une application qui se comporte de façon inattendue? Parce que cela revient vraiment à soit planter soit présenter à l'utilisateur un écran vide ou un comportement dont l'utilisateur n'est pas conscient.
-
Je poste ici quelques extraits du vrai code
private void makeRequestForForgetPassword() { try { HashMap 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) { } }
Il ne s'agit pas d'un doublon de Android exception handling best practices, là l'OP essaie de gérer les exceptions dans un but différent de cette question.
11 votes
Ne répondez pas à votre question, mais ne passez jamais sous silence les exceptions
catch(Exception e){}
- ce commentaire avait du sens avant la modification de la question1 votes
Voir stackoverflow.com/questions/6115896/…
29 votes
Ah, le célèbre
ON ERROR RESUME NEXT
0 votes
Les commentaires ne sont pas destinés à des discussions prolongées ; cette conversation a été déplacée vers le chat.
0 votes
Possible duplicate stackoverflow.com/questions/16561692/… Possible duplicate stackoverflow.com/questions/16561692/…
0 votes
Possible duplicate de Android exception handling best practice?
2 votes
Cette question m'a fait réfléchir, car j'utilise aussi souvent try{}catch(Exception e){} lorsque je suis à court de temps