【问题标题】:Thread.sleep() blocks the main UI thread [closed]Thread.sleep() 阻塞主 UI 线程 [关闭]
【发布时间】:2013-03-06 06:26:15
【问题描述】:

我有这个帖子:

private class MyThread extends Thread{
    public void run(){
        try {
            sleep(10000);
            Utils.stopTimer();
        } catch (InterruptedException e) {
            Log.d(TAG, "interrupted");
        }
    }
}

然后我开始了线程。但是线程阻塞了主 UI 线程,导致它无法响应用户交互。

【问题讨论】:

  • 那么您的问题/问题是什么?它根据线程概念工作
  • 使用 Thread.sleep(10000);
  • @Kirit 由于不幸的是this.sleep 是静态方法Thread.sleep 的“别名”,这将产生等效的语义。但是,我确实同意在类型上显式调用静态方法是更好的形式。
  • 你看这个帖子怎么样?你是调用start方法还是直接调用run方法?
  • 我同意。你的问题?

标签: java android multithreading interrupted-exception


【解决方案1】:

致电myThread.start() 而不是myThread.run()

执行后者不会导致代码在不同的线程中执行,而只是在 当前(例如 UI)线程上调用 run 方法 -像任何其他正常的方法调用一样。


摘自链接文档:

start 使该线程开始执行; Java 虚拟机调用run 方法[在启动的线程中] ..

【讨论】:

    【解决方案2】:

    你需要调用thread.start()来启动一个线程,当你调用该run()方法时会自动执行。

      Calling this thread will also blocks the UI thread, you need to call it Async Task or in runonuithread.
    

    【讨论】:

      【解决方案3】:

      最好使用AsyncTaskActivity.RunOnUIThread 来执行此类代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多