【问题标题】:ANDROID - While loop inside ThreadANDROID - 线程内的 While 循环
【发布时间】:2012-04-13 08:13:32
【问题描述】:

我创建了一个线程来处理一些队列数据。在线程内部有一个无限的while循环。当循环工作时,界面总是冻结。

我对此感到困惑,我已经创建了线程,但为什么它仍然冻结?

Thread queue = new Thread(new Runnable() {
   public void run() {
        while(true) {
          ...
        }
    }
  }); 
  queue.start;

这个问题有什么解决办法吗?

【问题讨论】:

  • 你需要while循环做什么?我想你试着在后台做点什么?然后也许检查 AsyncTask
  • @Felix .. 您在 While 循环中所做的事情很重要.. 希望它不会创建对象...
  • 是的,你说得对。我正在使用异步任务,但它提出了同样的问题。我需要无限循环来观察变量何时发生变化。
  • 发布你在while循环中所做的事情......我的意思是里面的代码......
  • @sandy 不,我没有创建对象。我试图监视一个变量以从 Internet 下载一些数据。就像在 while 循环中一样: if (address != null) { result = result + downloaddata(address); }

标签: java android multithreading loops while-loop


【解决方案1】:

这不仅是您的界面变慢了,事实上您的手机也会变慢,因为您在一个 while 循环中消耗(不必要地浪费了)所有处理能力。要获得更好的方法,请使用 Handler 和/或 AsyncTask 或至少在线程的 while 循环中使用 Thread.sleep

【讨论】:

  • 哦,我想当我使用新线程时,不会拖慢界面?
  • 是的,它确实创建了一个新线程,但该线程也完全占用了处理器。尝试将 Thread.sleep(1000); 放在 while-loop 中,您会看到不同
  • 哦,好的,谢谢@Waqas。我会试试看。对不起,但我的声誉不足以支持您的解决方案:(
猜你喜欢
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 2015-06-14
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 2016-03-14
相关资源
最近更新 更多