【面试】Handler机制与通信的实现
2015-11-20 19:00
197 查看
UI Thred(UI线程)push指示消息到MessageQueue(消息队列)当中,之后进入到Looper(消息处理通道)中进行处理,Handler(消息指示接收)根据Looper发送出来的消息执行UI/数据更新等操作。
举一常用例子,用Message在子线程当中实现界面数据更新。
1.自制Handler对消息进行处理
private class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what){
case UPDATE ://在收到消息时,对界面进行更新
mText.setText("This update by message");
break;
}
}
}
2.建立新的线程发送消息
private void updateByMessage() {
//匿名对象
new Thread() {
public void run() {
//UPDATE是一个自己定义的整数,代表了消息ID
Message msg = mHandler.obtainMessage(UPDATE);
mHandler.sendMessage(msg);
}
}.start();
}
补充一下,AsyncTask本事就是一线程池,与Handler相比是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。但是相对Handler而言要更耗资源,且更新UI比较复杂。(两者的特点与区别可查看原文)
举一常用例子,用Message在子线程当中实现界面数据更新。
1.自制Handler对消息进行处理
private class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what){
case UPDATE ://在收到消息时,对界面进行更新
mText.setText("This update by message");
break;
}
}
}
2.建立新的线程发送消息
private void updateByMessage() {
//匿名对象
new Thread() {
public void run() {
//UPDATE是一个自己定义的整数,代表了消息ID
Message msg = mHandler.obtainMessage(UPDATE);
mHandler.sendMessage(msg);
}
}.start();
}
补充一下,AsyncTask本事就是一线程池,与Handler相比是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。但是相对Handler而言要更耗资源,且更新UI比较复杂。(两者的特点与区别可查看原文)
相关文章推荐
- iOS开发者面试必备题汇总
- 黑马程序员——Java基础---面向对象(一)
- 做程序员有什么好处
- 做程序员有什么好处
- JAVA面试题集
- 【黑马程序员】多线程总结
- java面试题整理
- 如何成为一个优秀的程序员
- 【黑马程序员】异常,File类,IO流——Java复习笔记
- 【黑马程序员】多线程,设计模式——Java复习笔记
- 经典java面试题集(很有意思的一套)
- android 面试准备
- 黑马程序员-Java基础(数组,String,StringBuffer,正则表达式)
- 给我们自己一个空间—兄弟连IT教育
- 【面试】Service与Activity如何实现通信
- 我是如何招聘程序员的
- 黑马程序员-Java基础(2)
- 90年前后出生的人现状如何?
- 常见JAVA基础面试题
- 黑马程序员——Java基础语法(三)---数组