Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我的";MyException“;这表明Toast在线程中引发问题。我应该如何重新组织异常处理?_Android_Multithreading_Exception Handling_Thread Exceptions - Fatal编程技术网

Android 我的";MyException“;这表明Toast在线程中引发问题。我应该如何重新组织异常处理?

Android 我的";MyException“;这表明Toast在线程中引发问题。我应该如何重新组织异常处理?,android,multithreading,exception-handling,thread-exceptions,Android,Multithreading,Exception Handling,Thread Exceptions,我已经编写了自己的异常(MyException),并实现了日志记录和以Toast的形式显示错误消息。这是它的缩写 public class MyException extends Exception { public MyException(String msg) { Looper.prepare(); Toast.makeText(Controller.getInstance().getApplicationContext(), msg , Toast.LEN

我已经编写了自己的异常(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类,但老实说,我不知道如何让它工作。这是正确的方法吗?您还可以看到,我已经在控制器中存储了ApplicationContext的引用。我是不是也要用ActivityContext来做,然后用ActivityContext来做祝酒词?(但我听说这在绩效方面不是一个好的做法)

更新

当一个活动中的线程捕获异常时,我应该这样做吗

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

应使用
异常
通知调用方出现问题。调用方负责处理通知、日志、祝酒等。您不应该在Exception类本身中执行这些操作

您可以创建一个helper方法,以便在捕获执行祝酒等操作的异常时调用。如果您希望从多个活动中执行此操作,可以创建一个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());
}

是的,那会有用的。更好的解决方案可能是使用AsyncTask。我认为它内置了对UI线程异常通知的支持。