【问题标题】:Try-Catch for runOnUiThreadrunOnUiThread 的 Try-Catch
【发布时间】:2015-06-15 01:46:04
【问题描述】:

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

    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 2some code 4 的任何异常,它们在runOnUiThread 内,捕获它们的唯一方法是在try-catch 内有一个try-catchrunOnUiThread抓住他们:

    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 真的需要这个吗?还是我做错了什么?如果它已经需要这个,是否有某种方法可以全局实现这一点,而不是每个runOnUiThread 代码块中的try-catch

【问题讨论】:

  • 首先,你为什么需要runOnUiThread()?你发现了什么异常?
  • @Egor 这是一个UI根据服务器定期响应而变化的应用程序,这些响应首先需要大量的解析和处理才能提取所需的信息,所以,我做了所有的解析和处理一个后台线程,并且只为 UI 更改运行 UI 线程。
  • @IvanSkoric 我知道如何捕获未捕获的异常,我正在我的应用程序中使用它,但实际上我不想让应用程序从乞讨中重新加载(这是我正在使用的操作当捕获未捕获的异常时)每次我从这个类中收到一个特定的异常。

标签: android exception try-catch android-runonuithread


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2010-12-14
    • 2020-03-13
    • 1970-01-01
    • 2021-11-25
    • 2011-02-20
    • 2019-02-28
    • 1970-01-01
    • 2012-11-25
    • 2014-11-27
    相关资源
    最近更新 更多