0

我想通过我的代码捕获一些异常,代码层次结构如下:

    try {
        // some code 1
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // some code 2
            }
        });

        // some code 3
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // some code 4
            }
        });
    } catch (Exception ex) {
    }

但是当这样运行时,它不会捕捉到 some code 2and some code 4which are inside的任何异常runOnUiThread,捕捉它们的唯一方法是在try-catch内部设置一个块runOnUiThread来捕捉它们:

    try {
        // some code 1
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                try {
                    // some code 2
                } catch (Exception e) {
                }
            }
        });

        // some code 3
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                try {
                    // some code 4
                } catch (Exception e) {
                }
            }
        });
    } catch (Exception ex) {
    }

那么,runOnUiThread究竟是需要这个吗?还是我做错了什么?如果它已经需要这个,是否有某种方法可以全局实现这一点,而不是try-catch在每个runOnUiThread代码块内部?

4

1 回答 1

3

那么,runOnUiThread 真的需要这个吗?

是的,当您使用时,runOnUiThread可能会在不同的处理线程上运行。这意味着在 中抛出的每个异常都Runnable 可能在与您尝试的线程不同的线程上抛出。

是否有某种方法可以全局实现这一点,而不是在每个 runOnUiThread 代码块中使用 try-catch?

有一个自定义类扩展Runnable“抛出”一个自定义/任何异常,但这听起来不太舒服。

于 2015-04-09T15:34:51.500 回答