【问题标题】:Does Thread.sleep() makes the UI Thread to sleep?Thread.sleep() 是否使 UI 线程进入睡眠状态?
【发布时间】:2013-09-06 10:22:51
【问题描述】:

这会使当前的 UI 线程进入休眠状态吗?

try 
{
   Thread.sleep(20);
   onProgressUpdate(i);
} catch (InterruptedException e) {
      e.printStackTrace();
}

【问题讨论】:

标签: java android multithreading


【解决方案1】:

仅当从 UI 线程调用时。

【讨论】:

  • 再补充一点,你永远不应该让 ui 线程休眠。您的应用将变得无响应,并询问用户是否要终止。
【解决方案2】:

如果你在 ui 线程上调用 sleep,它会阻塞 ui 线程。不要在 ui 线程上调用 sleep。你不应该阻塞 ui 线程。

http://developer.android.com/reference/java/lang/Thread.html

http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html

你会得到 ANR

如果您实现 ThreadHandlerThread,请确保您的 UI 线程在等待工作线程完成时不会阻塞 - 不要调用 Thread.wait()Thread.sleep()

http://developer.android.com/training/articles/perf-anr.html

还可以查看如何避免 ANR 下的主题

【讨论】:

    【解决方案3】:

    Thread.sleep(time) 将导致发送此消息的线程在给定的时间间隔内休眠。所以如果你在 UI 线程中调用它,它会影响 UI 线程。就 android 而言,不建议以任何方式阻塞 UI 线程,否则会导致 ANR - 应用程序无响应。

    您可以参考this

    【讨论】:

      【解决方案4】:

      嗯,语言中的任何静态方法都可以在对象引用而不是类上调用。但这并不会改变功能:Thread.sleep() 是一个静态方法,可以让当前线程进入睡眠状态。

      【讨论】:

        猜你喜欢
        • 2011-05-12
        • 2012-06-21
        • 2013-02-14
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多