Handler handler = new Handler();
Runable update = new Runnable(){
publicvoid run(){
System.out.println(“update”);
handler.postDelayed(update,3000); //3秒后将update线程添加到队列中
}
}
handler.post(update); //将update线程添加到队列中,实际上是执行update中的run方法,而不是以start方式启动线程,所以是在同一个线程中执行,而不是新启动一个线程。
可以通过Thread.currentThread().getId();来判断是否同一个线程
handler.removeCallbacks(update); //
Handler handler = new Handler(){
publicvoid handleMessage(Message msg){
…..msg.arg1
…..msg.arg2
(string)msg.obj
}
}
Message msg = handler.obtainMessage();
msg.arg1 = 1;
msg.arg2 = 1;
msg.obj = “abc”
handler.sendMessage(msg); //将msg对象加入消息队列当中,handleMessage方法就会接收到
使用新线程来处理消息
//生成一个HandlerThread对象,实现了使用Looper来处理消息队列的功能
HandlerThread handlerThread = newHandlerThread(“handler_thread”);
//在使用HandlerThread的getLooper()方法之前,必须先调用该类的start(),否则getLooper()取出的为空
handlerThread.start();
MyHandler myHandler =newMyHandler(handlerThread.getLooper());
Message msg = nyHandler.obtainMessage();
msg.sendToTarget(); //将msg发送到目标对象,所谓的目标对象就是生成该msg对象的handler对象
class MyHandler extends Handler{
publicMyHandler(){ //在main线程中执行
}
publicMyHandler(Looper looper)
{
Super(looper); //指定MyHandler在looper这个线程中执行,而不是main线程执行
}
publicvoid handlerMessage(Message msg){
}
}
通过Message来发送大量数据时,应该使用setData(Bundle bundle)
Bundle b = new Bundle();
b.putInt(“age”,19);
b.putString(“name”, “Jhon”);
msg.setData(b);
msg.sendToTarget();
取数据时:
Bundle b = msg.getData();
int age = b.getInt(“age”);
String name = b.getString(“name”);