在Android中handler用来进行进程间通信,其中有send和post两种方法,大家常用的send方法,其是在工作线程中处理完耗时操作后调用handler的sendMessage(message)把message对象发送给主线程,在主线程中重写handlerMessage()方法,判断接收到的消息进行更新UI的操作;而post方法传递的是一个runnable对象,更新UI的操作也是在这个runnable的run方法中进行的,也就是说run方法中的代码是执行在主线程中的,虽然它是写在工作线程中,主线程在接收到消息后自动执行runnable的run方法中的代码。
上图上代码:
public class MainActivity extends Activity {
private Button btSend;
private Button btPost;
private TextView textview;
private static final int SEND_UPDATA_TEXT=0;
private Handler handler=new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case SEND_UPDATA_TEXT:
textview.setText("sendMessage发来的消息");
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
setViews();
//事件监听
setListener();
}
private void setListener() {
btSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
Message message=new Message();
message.what=SEND_UPDATA_TEXT;
handler.sendMessage(message);
}
}).start();
}
});
btPost.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
//使用post发送消息
handler.post(new Runnable() {
//run方法中的代码执行在UI线程中
@Override
public void run() {
textview.setText("post发来消息");
}
});
}
}).start();
}
});
}
private void setViews() {
btSend=(Button) findViewById(R.id.bt_send);
btPost=(Button) findViewById(R.id.bt_post);
textview=(TextView) findViewById(R.id.textview);
}
}
其二 解释:
SENDMESSAGE OR POSTMESSAGE 吗?
前者等到执行结果返回,后者将消息送到消息队列之后返回^_^
其三 解释:
是的,前者中断进程,后者不中断进程
其四 解释:
post是一直在等到有空闲时才执行
其五解释:
send=>挂号信
post=>平信