除了隐式用户界面线程,我做了两个线程(可运行),两者都具有在其内部while循环中,我定期检查,我已经实现了一个消息队列中更新。的Android/Java线程睡眠
首先问题在于两个while循环是无限的,它们变化如此之快以致于它们几乎耗尽了设备的所有CPU。 所以我想关于做while循环睡觉大约100毫秒为单位每个周期后,让其他线程做他们的工作,但我遇到了另一个问题:
现在的问题是,线程睡眠100毫秒,但他们不会让UI线程在这段时间内工作:(而这会做的是让用户界面变得迟钝当我在屏幕上拖动一些东西时,它会滞后一点
所以我想要做的是让这些线程(这些while循环)检查消息队列标志每100毫秒,但在这100毫秒我不想让UI线程运行,这又如何实现呢?
编辑1
我找到了产量的方法,它停止当前线程的运行,但做的时候我打电话呢?我需要调用睡眠线程,同时使它产生某种...?
编辑2
这两个类是单例,以及i从应用程序的第一活动启动它们,所以当应用程序开始(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*/
}
}
请粘贴一些代码。你如何开始线程和在哪里?在同步方式 – 2012-04-27 10:39:20
运行的运行。如果你不开始他们的线程(新的线程(可运行)。开始()) – Blackbelt 2012-04-27 10:40:15
这听起来很像你实际上并没有开始新的线程,或者你在做UI的更新他们至少。另外,如果你打算使用yield(),那么要小心!它只允许其他线程在等待时运行,并且具有相同的优先级。 – vaughandroid 2012-04-27 10:46:07