非常简单一段代码import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;public class TestHandler extends Activity { private Handler handler=new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
handler.post(theadRunnable);
setContentView(R.layout.main);
System.out.println("Activity ID:"+Thread.currentThread().getId());
System.out.println("Activity NAME:"+Thread.currentThread().getName());
}
private Runnable theadRunnable=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Handler ID:"+Thread.currentThread().getId());
System.out.println("Handler NAME:"+Thread.currentThread().getName());
try {
Thread.sleep(100000);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
};
}然后,它的输出结果是:
12-22 13:19:29.361: I/System.out(372): Activity ID:1
12-22 13:19:29.410: I/System.out(372): Activity NAME:main
12-22 13:19:29.471: I/System.out(372): Handler ID:1
12-22 13:19:29.471: I/System.out(372): Handler NAME:main
这让我很不理解,输出结果的顺序和我想的完全相反。
希望有朋友能帮我解释这个输出结果是为何
import android.os.Bundle;
import android.os.Handler;public class TestHandler extends Activity { private Handler handler=new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
handler.post(theadRunnable);
setContentView(R.layout.main);
System.out.println("Activity ID:"+Thread.currentThread().getId());
System.out.println("Activity NAME:"+Thread.currentThread().getName());
}
private Runnable theadRunnable=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Handler ID:"+Thread.currentThread().getId());
System.out.println("Handler NAME:"+Thread.currentThread().getName());
try {
Thread.sleep(100000);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
};
}然后,它的输出结果是:
12-22 13:19:29.361: I/System.out(372): Activity ID:1
12-22 13:19:29.410: I/System.out(372): Activity NAME:main
12-22 13:19:29.471: I/System.out(372): Handler ID:1
12-22 13:19:29.471: I/System.out(372): Handler NAME:main
这让我很不理解,输出结果的顺序和我想的完全相反。
希望有朋友能帮我解释这个输出结果是为何
执行,所以先看到的是main的信息。等main执行完后(这个速度是很快的),再从消息队列中取出
刚才放的任务,并执行这个任务,也就是run方法,所有后看到的是thread信息。一句话:就是Android中所谓的异步机制。
post一个消息,是塞到队列的尾部, 消息循环取队列头上的动作去执行。你的handler.post(theadRunnable);
还要等很久才能排上队执行呢
请教一个问题,在消息队列里是不是同时可以放置Runnable和Message?那么当队列首位是Runnable,其次是一个message的时候。handler是取出这个Runable去执行,还是会调用handleMessage(Message msg),执行这个方法体?