这是一个扩展条条实现run()函数的类:为什么Handler.Post阻塞主线程
public class TestThread extends Thread{
public Handler handler;
public TestThread(){
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
}
};
}
public Looper getLooper(){
return Looper.myLooper();
}
@Override
public void run() {
// TODO Auto-generated method stub
Looper.prepare();
Looper.loop();
}
}
现在在主活动按钮,我有这样的代码:
TestThread t=new TestThread();
t.start();
Handler h=new Handler(t.getLooper());
h.post(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while (true);
}
});
据我所知,这应该把runnable放在目标线程的消息队列中,并且线程(不是UI线程)会在可能的时候运行它。 但是这段代码阻止了用户界面。为什么会发生?正如你所看到的,我将目标线程的活套发送给了处理程序的构造函数,处理程序应该使用该活套标识符而不是主线程的活套。
t.getLooper()返回UI Looper,为什么不使用HandlerThread类? – pskink