Handler、Looper、MessageQueue、Message
来源:互联网 发布:数据监控的技术方案 编辑:程序博客网 时间:2024/05/17 03:14
1.什么是handler : 是Android提供用来更新UI线程的一套机制,也是一套消息处理机制,可以发送消息,也可以处理消息。
在handlerMessage()方法中处理UI
arg1、arg2:均为整形数据,用来传输一些整形,如更新进度条。
obj:一个Object对象
在Activity中有一个默认的Looper对象来处理子线程中发送的消息
一个线程只能产生一个Looper对象
Looper Handler Message MessageQueue之间的关系:
Handler:封装了消息的发送和接收处理
Looper:内部包含一个消息队列MessageQueue,所有的Handler发送的消息都走向这个消息队列。Lopper.loop()方法就是一个死循环,不断的从MessageQueue对象取消息,如有消息就处理,没有消息就阻塞。
MessageQueue:一个消息队列,由Message构成。可以添加消息,并处理消息
总结:Handler负责发送Message,Looper负责接收Handler发送的消息,并直接传回给Handler自己,而MessageQueue就是一个存储消息的容器
在handlerMessage()方法中处理UI
发送的消息遵循先进先出原则
arg1、arg2:均为整形数据,用来传输一些整形,如更新进度条。
obj:一个Object对象
what:标记数,用户定义的消息代码,以便识别是哪一个Message
在Activity中有一个默认的Looper对象来处理子线程中发送的消息
一个线程只能产生一个Looper对象
Looper Handler Message MessageQueue之间的关系:
Handler:封装了消息的发送和接收处理
Looper:内部包含一个消息队列MessageQueue,所有的Handler发送的消息都走向这个消息队列。Lopper.loop()方法就是一个死循环,不断的从MessageQueue对象取消息,如有消息就处理,没有消息就阻塞。
MessageQueue:一个消息队列,由Message构成。可以添加消息,并处理消息
总结:Handler负责发送Message,Looper负责接收Handler发送的消息,并直接传回给Handler自己,而MessageQueue就是一个存储消息的容器
一个通过handler和http读取网页上图片的例子
public class MainActivity extends Activity {Button button;ImageView imageView;String uri="http://pic1.nipic.com/2008-12-12/20081212153724720_2.jpg";private ProgressDialog dialog=null;Handler handler=new Handler(){public void handleMessage(android.os.Message msg) {byte[]data=(byte[]) msg.obj;Bitmap bitmap=BitmapFactory.decodeByteArray(data, 0, data.length);imageView.setImageBitmap(bitmap);if (msg.what==1) {//当接收到what时 说明已经传完 dialog.dismiss();}};};public class MyThread implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubHttpClient httpClient=new DefaultHttpClient();HttpGet httpGet=new HttpGet(uri);HttpResponse httpResponse=null;try {httpResponse=httpClient.execute(httpGet);if (httpResponse.getStatusLine().getStatusCode()==200) {byte[]data=EntityUtils.toByteArray(httpResponse.getEntity());Message message=Message.obtain();message.obj=data;message.what=1;handler.sendMessage(message);}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=(Button)findViewById(R.id.button);imageView=(ImageView)findViewById(R.id.image);dialog=new ProgressDialog(this);dialog.setTitle("提示");dialog.setMessage("正在下载,请稍后···");dialog.setCancelable(false);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubnew Thread(new MyThread()).start();dialog.show();}});}}
0 0
- Looper,Handler,Message,MessageQueue
- Message,MessageQueue,Looper,Handler
- Message,Handler,Looper,MessageQueue
- Handler、Looper、MessageQueue、Message
- Handler,Message,Looper & MessageQueue
- Handler、looper、message、messageQueue
- Handler,Looper,MessageQueue(Message)
- Handler、Looper、Message、MessageQueue
- Handler、Looper、Message、MessageQueue
- Message,MessageQueue,Looper,Handler详解
- Message,MessageQueue,Looper,Handler详解
- Android MessageQueue,Message,Looper,handler
- Handler,Looper,MessageQueue,Message总结
- Message,MessageQueue,Looper,Handler,HandlerThread
- Handler、Message、MessageQueue、Looper 理解
- Handler、Looper、ThreadLocal、MessageQueue、Message
- Looper Handler MessageQueue Message 探究
- Android Handler Looper Message MessageQueue
- HTML5-JS文件-让IE浏览器支持HTML5标准
- Android之JAVASe基础篇-面向对象-高级部分(四)
- 【高斯消元】BZOJ 1770: [Usaco2009 Nov]lights 燈
- tutorialspoint 教程之《Web Services 指南》
- socket实现简单文件传输系统
- Handler、Looper、MessageQueue、Message
- 正则表达式
- 使用异步Post在新浪发微博
- html 冷门
- ASP.NET MVC - Redirect-and-Post-JSON-Object-in-ASP-NET-MVC
- SIM908和STM32数据上传到上位机
- 【线段树/数学/扩展欧几里得】 Bzoj 3913:奇数国
- smart 和 dumb组件
- 在 iOS 9 中运行企业版应用