Android 线程和 Throwable

标签 android multithreading try-catch android-context throwable

我有一个执行 I/O 的类(我们称之为 ABC)。像 FileOutputStream.close 这样的东西会让你在它们周围使用 try catch block 。此外,我创建了自己的可抛出对象,帮助用户和我了解正在发生的事情。

在这个类中,我传入了创建它的 Activity 的上下文,并使我创建了一个带有可抛出文本的警告对话框。

所以这是我的问题,我需要从一个新线程运行这个类,但仍然想从 throwable 的文本中获取信息。

例如,这就是我类典型的 catch 子句的样子。

new AlertDialog.Builder(myContext)
                        .setTitle("Error Message")
                        .setMessage(
                                "Error Code: #006" + "\n" + T.toString())
                        .setNeutralButton("OK",
                                new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(
                                            DialogInterface dialog,
                                            int which) {
                                        // TODO: Add Ability to Email
                                        // Developer

                                    }
                                }).show();

我会做类似的事情吗

throw new Throwable(throwable);

ABC 类中的这个代替警告对话框?然后我会将警报对话框移动到调用我的 Runnable 接口(interface)运行方法的 try catch 还是在后台执行异步任务?

最佳答案

使用 Java 的 Thread.UncaughtExceptionHandler保存文本/显示对话框。因此,您将创建一个扩展 Thread.UncaughtExceptionHandler 的新类,如下所示:

public class myThreadExceptionHandler implements Thread.UncaughtExceptionHandler
{
    private DataTargetClass dataTarget;
    public myThreadExceptionHandler(DataTargetClass c)
    { 
        dataTarget = c;
    }
    public void uncaughtException(Thread t, Throwable e)
    {
        dataTarget.exceptionObject = e;
        dataTarget.onException();
        // Just substitute in whatever method your thread uses to return information.
    }
}

在启动线程的代码中,您可以这样做:

foo = new DataTargetClass();
Thread t = new Thread(myIoRunnable(foo));
t.setUncaughtExceptionHandler(new myThreadExceptionHandler(foo));
t.start();

关于Android 线程和 Throwable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10527308/

相关文章:

java - 如何摆脱每个方法中的 try/catch 方法

c# - 你能 catch using block 吗?

android - 带有捕捉全屏卡片的垂直 RecyclerView

c++ - 析构函数应该是线程安全的吗?

java - 如何调度作用于单个对象的三个线程?

c++ - 使用一个对象线程中的 const 方法是否安全?

android - 在 Android 中使用 ChildFragmentManager 时 fragment 替换​​不起作用

android - 重复使用膨胀的 View ,不膨胀超过一次

android - 从冷启动(当应用程序被杀死时)使用 Expo 读取推送通知

java - 在 Java 中进行异常处理时从未抛出异常