Android 我的";MyException“;这表明Toast在线程中引发问题。我应该如何重新组织异常处理?
我已经编写了自己的异常(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
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线程异常通知的支持。