Android线程和Throwables

时间:2012-05-10 03:56:25

标签: android multithreading try-catch android-context throwable

我有一个执行I / O的类(让我们称之为ABC)。像FileOutputStream.close这样的东西会让你在它们周围使用try catch块。另外,我创建了自己的throwable对象,帮助用户和我知道发生了什么。

在这个类中,我传入了创建它的活动的上下文,并使得我创建了一个带有throwable文本的警告对话框。

所以这是我的问题我需要从一个新线程运行这个类,但仍然希望从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类中代替警告对话框?然后我会将警报对话框移动到try catch中,在那里调用Runnable接口运行方法,或者在后台执行asynchtask吗?

1 个答案:

答案 0 :(得分:2)

使用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();