這是一個擴展條條實現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