当前位置: 首页 > 知识库问答 >
问题:

ProgressDialog.set消息(字符串)不抛出IllegalStateExcure

钱稳
2023-03-14

我调用Progressdialog.set消息(字符串)方法从一个工人线程在下面的代码,但Android不抛出IllegalStateExc0019这应该说java.lang.IllegalStateExc0019:调用视图方法在另一个线程比UI线程”,因为我正在修改UI从外部的UI线程,这在Android中是禁止的。

以下是我的工作线程作为内部类的可运行状态:

public class HostOnHoldRunnable implements Runnable {

    @Override
    public void run() {
            hostOnHoldDialog.setMessage("Game is on hold because the host paused the app (" + currentTimeLeftForHostOnHoldTimeOut / 1000 + ")");
        }
    }
}

注意:host OnHoldDialog是我活动的ProgressDialog成员。

而不是抛出IllegalStateExc0019,android只是不根据消息更新UI。

这是虫子吗?

如果我在Runnable中使用rununuithread,一切正常,例如。

public class HostOnHoldRunnable implements Runnable {

    @Override
    public void run() {
         runOnUiThread(new Runnable() { 
             public void run() { 
            hostOnHoldDialog.setMessage("Game is on hold because the" + 
            " host paused the app (" + 
            currentTimeLeftForHostOnHoldTimeOut / 1000 + ")");

             }
         });
    }
}

共有2个答案

滕项明
2023-03-14

尝试使用

Handler handler = new Handler();
    handler.post(new Runnable() {

        @Override
        public void run() {
            hostOnHoldDialog.setMessage("Game is on hold because the host paused the app (" + currentTimeLeftForHostOnHoldTimeOut / 1000 + ")");
        }
    });
严瑞
2023-03-14

嗯,您可以看到HandlerLooper一起运行消息,Handler在UI线程上运行,每个视图都有一个附加的处理程序,使其能够在UI线程上发布方法/函数,任何新创建的线程想要运行消息或在UI线程上运行都必须调用处理程序或Looper。prepare()将实现哪个后续处理程序。在多线程应用程序上,使用Handler()。post()或Handler()。postDelayed()或视图。post()或视图。postDelayed()或上下文。getMainLooper()都是帮助您在UI线程上发布的函数,所以如果您使用这种方法调用方法,您将不会得到异常。所以这里并没有问题或bug,只需阅读Looper、Hanlder和View上的几行文档即可

 类似资料:
  • 既然我们可以在Javascript中使用关键字抛出任何东西,那么我们就不能直接抛出一个错误消息字符串吗? 有人知道这里面有什么陷阱吗? 让我对此添加一些背景:在JavaScript世界中,人们通常依赖参数检查而不是使用try-catch机制,因此只使用抛出致命错误是有意义的。不过,为了能够捕捉一些系统错误,我必须为我自己的错误使用一个不同的类,而不是创建错误的子类,我认为我应该只使用String。

  • 我在服务层的spring-boot应用程序中使用了Hystrix(Camden.sr7版本),而没有回退方法。Service的方法之一如下所示: 对于这样的响应,不清楚实际上是从哪个方法抛出异常的。如果我将版本更改为brixton.sr5(以前的版本),它将返回清晰的响应: 因此Hystrix的新版本(实际上是spring-cloud-dependencies的新版本)不会抛出HystrixRun

  • 我只想得到所有的消息数据。这样它就应该在父消息的花括号之间查找消息和所有数据。有了下面的代码,我也得到了服务细节以及我不想要的消息。对此专家的任何建议都要提前感谢。 我期待响应如下在我的字符串大小为2的数组列表。 好的。get(0)应该是 好的。get(1)应该是

  • 我知道您可以使用try-catch块对自定义消息抛出异常,例如: 但是如果我们在实用程序类中有一个方法,例如: 然后我们进入服务类,如下所示: 有没有一种方法可以自定义设置来自实用程序类方法<code>processFiles()</code>的消息及其<code>抛出的IOException</code>,而不是在该方法内部使用try-catch块?

  • 问题内容: SonarQube抱怨“ 字符串不包含格式说明符” 。使用时,尤其是方法“ ”。例如 它指的是这个规则:https : //wiki.sei.cmu.edu/confluence/display/c/FIO47-C.+Use+valid+format+strings 但是,在此规则中,我们可以找到以下引号: 每个转换规范都以%字符开头,后跟(按顺序) 零个或多个标志(以任何顺序),这些

  • 我想得到所有的消息数据。这样它就应该在父消息的花括号之间查找消息和所有数据。有了下面的模式,我没有得到所有的父体。 在我的字符串数组列表中,我希望得到如下大小为2的响应。 应该是: 和应该是: