2016-08-10 62 views
0

我有一个全球性错误时抛出的处理程序的应用程序像在此之前显示敬酒:安卓:运行时异常退出

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

    } 
} 

我想避免显示力贴近用户,并显示用户友好的敬酒像“出事了。 ..“。 这里是异常处理类:

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); 
    } 
} 

的问题是,当涉及到显示敬酒,申请冻结,等到System.exit()的调用,然后应用程序退出。正如它在引用下面的问题时注意到的,在显示吐司后立即调用exit()会导致进程kill,并且不会显示吐司。

P.S.我读过thisthisthis但他们都没有找到解决办法。

+2

为什么你正在退出应用程序的问题。处理exeptions应该处理它不杀应用程序,创建一些ErrorActivty并在那里赶上。你正在做与标准的android异常相同的功能 - 杀应用程序,我没有注意到这种想法的目的。 –

+0

@MaciejSikora即使试图处理所有异常,也可能发生这样的情况,即由于不同的原因(开发人员错误,开发人员缺乏知识,不同操作系统和平台的广泛变化)而未捕获其中的一些异常。所以我只是想避免显示用户着名的“强制关闭..”窗口并保存错误日志以查明问题并在将来处理未捕获的异常。这是原因! :) – VSB

+0

应用程序错误不是小宠物,解决他们不抓住他们:)。改变思维方式。 –

回答

-1

在onDestroy()中做吐司。我认为这是好的方法:)

最好的regar