所以我有以下主题:
public class MyThread extends Thread
{
Handler cHandler;
private boolean looprunning = false;
MyThread() {
cHandler = new Handler();
looprunning = true;
}
@Override
public void run(){
while (looprunning) {
//do stuff here
//update another system here or something else.
}
}
}
在这个线程的while循环中,我想运行一个Runnable,当线程在while循环中循环时,我传递给线程。我该怎么做?
答案 0 :(得分:2)
首先请将looprunning
标记为易失性,以获得正确的线程可见性
你可以使用队列
Queue<Runnable> taskQueue = new ConcurrentLinkedQueue<Runnable>();
@Override
public void run(){
while (looprunning) {
//do stuff here
//update another system here or something else.
Runnable r = taskQueue.poll();
if(r!=null)r.run();
}
}
您可以使用您选择的(线程安全)队列
答案 1 :(得分:1)
Android已经提供了一种机制来创建在执行Runnables的循环中运行的线程。看看HandlerThread
答案 2 :(得分:0)
你这样做就像你在run方法中编写的任何计算一样,当它完成时向处理程序发送消息和任何UI相关的事情,比如改变UI,就像我在做progressdialog dismiss(); 还有一件事,如果尝试在运行中改变UI,你肯定会得到泄漏窗口错误,因为你试图在非UI线程中更改UI。
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
dialog.dismiss();
}
};
dialog = ProgressDialog.show(NewTransaction.this, "",
"Loading Meters...", false);
new Thread() {
public void run() {
while(Condition){
do Something
}
handler.sendEmptyMessage(0);
}
}.start();