gpt4 book ai didi

android - 我的 "MyException"显示 Toast 在线程中引发问题。我应该如何重新组织异常处理?

转载 作者:搜寻专家 更新时间:2023-11-01 09:17:07 25 4
gpt4 key购买 nike

我已经编写了自己的异常 (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 ? (但我听说这在性能方面不是一个好的做法)

更新

当在 Activity 的线程中捕获异常时,我应该这样做吗?

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 应该用来通知调用者发生了问题。调用者有责任对该通知、日志、toasts 等进行处理。您不应在 Exception 类本身中进行任何操作。

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

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

在你的 Activity 中:

try {
// something that causes Exception
} catch (MyException e) {
Helper.displayExceptionMessage(this, e.getMessage());
}

关于android - 我的 "MyException"显示 Toast 在线程中引发问题。我应该如何重新组织异常处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3857676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com