2016-08-10 2 views
0

J'ai une application avec gestionnaire global de excpetion comme ceci:Android: Affichage du pain grillé avant l'exécution sauf sortie

public class MyApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this)); 

    } 
} 

Je veux éviter la force d'affichage à proximité de l'utilisateur et de montrer l'utilisateur un toast amical comme « Quelque chose a mal tourné. .. ". Voici la classe gestionnaire d'exception:

public class ExceptionHandler implements 
     Thread.UncaughtExceptionHandler { 
    private final Context myContext; 
    private final String LINE_SEPARATOR = "\n"; 


    public ExceptionHandler(Context context) { 
     myContext = context; 
    } 

    public void uncaughtException(Thread thread, Throwable exception) { 
     StringWriter stackTrace = new StringWriter(); 
     exception.printStackTrace(new PrintWriter(stackTrace)); 
     StringBuilder errorReport = new StringBuilder(); 
     errorReport.append("************ CAUSE OF ERROR ************\n\n"); 
     errorReport.append(stackTrace.toString()); 
     Log.e("ERROR_TAG", errorReport.toString()); 
     Utils.showShortToast(R.string.something_went_wrong, myContext); 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
        android.os.Process.killProcess(android.os.Process.myPid()); 
        System.exit(10); 
      } 
     },1000); 
    } 
} 

Le problème est quand il s'agit d'afficher des toasts, des gels d'application et d'attendre jusqu'à ce System.exit() est appelée et puis quitte l'application. Et comme il l'a remarqué dans les questions de mise à jour ci-dessous, appeler exit() juste après l'affichage du toast conduit au traitement kill et n'affiche pas toast.

P.S. J'ai lu this, this et this mais aucun d'entre eux mènent à une solution.

+2

Pourquoi vous quittez l'application pour problème. manipuler des exeptions devrait gérer ne pas tuer app, créer un ErrorActivty et y aller dans catch. Vous faites la même chose que l'exception android standard - tuer l'application, je ne comprends pas et le but d'une telle réflexion. –

+0

@MaciejSikora Même en essayant de gérer toutes les exceptions, il peut arriver que certaines d'entre elles ne soient pas interceptées pour des raisons différentes (erreur de développeur, manque de connaissance du développeur, grande variation des différents OS et plateformes). Donc, je veux juste éviter d'afficher l'utilisateur la famouse "Force Close .." fenêtre et enregistrer le journal des erreurs pour localiser le problème et gérer cette exception non interceptée à l'avenir. C'est la raison! :) – VSB

+0

Les erreurs d'application ne sont pas des pokemons, résolvez-les pas les attraper :). Changer de façon de penser. –

Répondre

-1

Faites le toast dans onDestroy(). Je pense que c'est un bon moyen :)

Best regar