J'ai écrit ma propre exception (MyException) et mis en œuvre la journalisation et l'affichage des messages d'erreur sous forme de toasts. En voici la forme abrégée ...Mon "MyException" qui montre Toast provoque des problèmes tout en jetant dans les discussions. Comment dois-je réorganiser la gestion des exceptions?
public class MyException extends Exception {
public MyException(String msg) {
Looper.prepare();
Toast.makeText(Controller.getInstance().getApplicationContext(), msg , Toast.LENGTH_LONG).show();
//Looper.loop();
Looper.myLooper().quit();
}
}
Tout allait bien jusqu'à ce que je mette maintenant en œuvre Threads où des exceptions sont levées et interceptées.
Vous avez probablement déjà vu, que j'ai joué avec la classe Looper, mais honnêtement, je ne sais pas comment le faire fonctionner. Est-ce la bonne approche? Vous pouvez également voir que je stocke déjà une référence de ApplicationContext dans mon contrôleur. Dois-je le faire avec le ActivityContext et ensuite faire le Toast à partir de ce ActivityContext? (Mais j'ai entendu dire que ce n'est pas une bonne pratique en termes de performance)
Mise à jour
Est-ce la façon dont je devrais aller, quand une exception est pris dans un fil dans une ity activ?
private Runnable exceptionCatchingThread = new Runnable() {
@Override
public void run() {
try {
throw new Exception();
} catch (Exception e) {
this.e = e;
runOnUiThread(handleThreadExceptions); }
}
}
private Runnable handleThreadExceptions = new Runnable() {
@Override
public void run() {
//Show toast or call the general ExceptionHandler,
//which is doing logging and stuff
Helper.handleException(e);
}
}
Vous pouvez jeter un oeil à ma mise à jour si tu veux – OneWorld
Oui, cela pourrait fonctionner. Une meilleure solution pourrait être d'utiliser AsyncTask. Je pense qu'il a pris en charge la notification d'une exception sur le thread de l'interface utilisateur. –