Message,Handler消息传递


Message

对消息的处理public voidhandleMessage(Message msg)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Handler mHandler = new Handler() {  
@Override public void handleMessage(Message msg) {
//覆盖handleMessage方法
switch (msg.what) {//根据收到的消息的what类型处理
case BUMP_MSG:
Log.v("handler", "Handler===="+msg.arg1);//打印收到的消息
break;
default:
super.handleMessage(msg);//这里最好对不需要或者不关心的消息抛给父类,避免丢失消息
break;
}
}
};

Message message = new Message();
message.what = 0;
message.obj = ;
message.arg1 = ;
message.arg2 = ;
mHandler.sendMessage(msg);

消息android.os.Message

属性字段:arg1、arg2、what、obj、replyTo等;

其中arg1和arg2是用来存放整型数据的;

what是用来保存消息标示的;

obj是Object类型的任意对象;

replyTo是消息管理器,会关联到一个handler,

handler就是处理其中的消息。

handler的obtainMessage方法实例化Message对象


Looper类主要用于一个线程循环获取消息队列中的消息。

Looper的作用主要是负责管理消息队列,负责消息的出列和入列操作。


Message创建方式:new Message和obtainMessage的区别


创建Message对象的时候,有三种方式,分别为:

  • Message msg = new Message();

  • Message msg2 = Message.obtain();

  • Message msg1 = handler1.obtainMessage();

Message msg = new Message();

首先创建Handler对象:

1
2
3
4
5
6
7
8
9
10
11
12
private Handler mHandrler = new Handler();
@Overrid public void handlerMessage(Message meg){
switch(msg.what){
case 0:
//TO DO
bereak;

default:
//TO DO
break;
}
}

然后是消息处理:

1
2
3
4
5
6
7
8
private TestMessage(){
Message message = new Message();
message.what = 0;
message.obj = ;
message.arg1 = ;
message.arg2 = ;
mHandler.sendMessage(msg);
}

Message msg1 = handler1.obtainMessage();

首先创建Handler对象:

1
2
3
4
5
6
7
8
9
10
11
12
13

private Handler mHandler = new Handler();
@Overrid public void handlerMessage(Message msg){
switch(msg.what){
case 0:
//TO DO
bereak;

default:
//TO DO
break;
}
}

然后是消息处理:

1
2
3
4
5
6
7
private void obtainMessageTest(){

Message msg = handler.obtainMessage();
msg.what = 1;
msg.sendToTarget();

}

Handler类介绍