Android/Java 线程休眠



除了隐式用户界面线程之外,我还创建了两个线程(可运行线程),它们内部都有一个 while 循环,我定期检查我实现的消息队列中的更新。

起初的问题是两个while循环是无限的,它们变化如此之快,如此之大,以至于它们几乎耗尽了设备的所有CPU。所以我考虑让 while 循环在每个循环后休眠大约 100 milisec,让其他线程完成它们的工作,但我遇到了另一个问题:

现在,问题是线程休眠了 100 毫秒,但它们在这段时间内不允许 UI 线程工作:(这样做会使 UI 滞后。当我在屏幕上拖动某些内容时,它会有点滞后。

所以我想做的是让这些线程(这些 while 循环)每 100 毫秒检查一次消息队列标志,但在这 100 毫秒内,我想让 UI 线程运行。如何做到这一点?

编辑 1

我找到了 yield 方法,它停止了当前线程的运行,但是我什么时候调用它?我需要调用睡眠线程,同时让它以某种方式屈服...... ??

编辑 2

这两个类是单例,我从应用程序的第一个活动开始启动它们,所以当应用程序启动时(UI 线程)

//Obtain object of singleton classes
ControllerSingleton controller = ControllerSingleton.getControllerSingleton();
OpponentSingleton opponent = OpponentSingleton.getOpponentSingleton();
//Start threads
/*--------CONTROLLER----------*/
Thread t;
t = new Thread( controller );       
t.setName("ControllerThread");
Log.i("Remy","Starting Controller thread...");
t.start();
/*--------OPPONENTS----------*/
t = new Thread( opponent );     
t.setName("OpponentThread");
Log.i("Remy","Starting Opponent thread...");
t.start();

在每个run()中,我都有下一个代码:

public void run() 
{
   while( true )
   {
      //Check if any messages in the queue
      if ( queueEmpty() == false )
      {
          //Do something ...              
      }
      /*HERE IS WHERE I WOULD LIKE TO TELL THE THREAD TO STOP AND WAIT FOR 100 ms*/
   }
}

我认为你需要使用的东西是Handler .例如,您可能希望查看本教程。

相关内容

  • 没有找到相关文章

最新更新