Afficher une boîte de dialogue dans " Thread.setDefaultUncaughtExceptionHandler`

Quand mon application android lancer une exception, je veux montrer un dialogue personnalisé pour dire à l'utilisateur il y a quelque chose de mal est arrivé, j'ai donc utiliser Thread.setDefaultUncaughtExceptionHandler pour définir un gestionnaire global d'exception:

public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, final Throwable ex) {
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
builder.setTitle("There is something wrong")
.setMessage("Application will exit:" + ex.toString())
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//throw it again
throw (RuntimeException) ex;
}
})
.show();
}
});
}
}

Mais je l'ai trouvé il n'y a aucune exception levée, le AlertDialog de ne pas s'afficher, au lieu de cela, l'application bloque et après un certain temps, il affichera une boîte de dialogue système:

X app is not responding. Would you like to close it?
Wait  |  OK

Que dois-je faire maintenant?


Mise à JOUR

Le journal:

11-16 12:54:16.017: WARN/WindowManager(90): Attempted to add window with non-application token WindowToken{b38bb6a8 token=null}.  Aborting.

Il semble que l'erreur provient de new AlertDialog.Builder(getApplicationContext());

Mais c'est un gestionnaire d'exception dans Application sous-classe, comment puis-je définir une instance d'activité?

collez le logcat trop
Ce message s'affiche lorsque l'application est prendre trop de temps (il n'y a aucune exception n'est levée dans ce cas). Ma recommandation est d'essayer de déplacer vos lourdes tâches à une AsyncTask.

OriginalL'auteur Freewind | 2012-11-16

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *