2

我已经编写了自己的异常 (MyException) 并以 Toast 的形式实现了记录和显示错误消息。这是它的缩写...

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

一切都很好,直到我现在实现了抛出和捕获异常的线程。

您可能已经看到,我玩过 Looper 类,但老实说,我不知道如何让它发挥作用。这是正确的方法吗?您还可以看到我已经在我的 Controller 中存储了 ApplicationContext 的引用。我也应该使用 ActivityContext 来做,而不是从这个 ActivityContext 中制作 Toast 吗?(但我听说这在性能方面不是一个好习惯)

更新

当活动的线程中捕获异常时,这是我应该走的路吗?

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

1 回答 1

3

AnException应该用于通知调用者发生了问题。调用者有责任对通知、日志、toast 等做一些事情。你不应该在 Exception 类本身中做任何事情。

您可以创建一个辅助方法,以便在您捕获执行烘烤等的异常时调用。如果您想从多个活动中执行此操作,您可以创建一个 util 函数,您可以在其中传递上下文。

public static void displayExceptionMessage(Context context, String msg) {
 Toast.makeText(context, msg , Toast.LENGTH_LONG).show();
}

在您的活动中:

try {
  // something that causes Exception
} catch (MyException e) {
  Helper.displayExceptionMessage(this, e.getMessage());
}
于 2010-10-04T17:52:07.727 回答