除了隐式用户界面线程外,我还创建了两个线程(runnables),两个线程都在其中有一个while循环,其中我定期检查我已实现的消息队列中的更新。
首先问题在于两个while循环是无限的,并且它们变化的非常快,以至于它们几乎用完了设备的所有CPU。
所以我想在每个循环之后让while循环睡眠大约100毫秒,让其他线程完成它们的工作,但是我遇到了另一个问题:
现在,问题是线程睡了100毫秒,但他们不让UI线程在这段时间内工作:(而这样做会让UI变得迟缓。当我在屏幕上拖动某些东西时,它会滞后一点。
所以我想要做的就是让这些线程(这些while循环)每100毫秒检查一次消息队列标志,但在那100微秒内,我想让UI线程运行。这如何实现?
编辑1
我找到了yield方法,它停止了当前线程的运行,但是我什么时候可以调用它?我需要调用睡眠线程,同时让它产生某种...?
编辑2
这两个类是单例,我从应用程序的第一个Activity开始,所以当应用程序启动时(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*/
}
}