Android的Handler机制
来源:互联网 发布:淘宝推广工具 编辑:程序博客网 时间:2024/05/22 10:49
handler在Android中使用频繁,具体作用就是调度Runnable和Message对象,让他们被执行,而执行的操作是放在不同线程中的。
对于消息循环的机制,分为Handler,Message,MessageQueue,Looper四个部分,一般来说是handler发送Message,message被发送到MessageQueue中,然后通过looper对消息进行整理,例如查看消息队列中是否有新消息,最后再由handler处理消息。
打个比方,把消息机制当成一个垃圾分拣站,一条条消息代表了一件件垃圾,而handler表示垃圾车,由垃圾车把垃圾运到了垃圾站里,而垃圾站则是代表MessageQueue,垃圾站中主要就只有两个操作,一个是送进来,一个是送出去;至于looper表示的是过滤器,把垃圾分类,并查看是否有新的垃圾进来,有的话则工作,没有就放在那待机。最后操作完之后,再把分配好的垃圾通过handler垃圾车运输出去。
简单的举个例子,弄清楚消息的内部机制,然后再具体了解handler的作用。
一个完整的消息系统建立完成之后,剩下的事情基本上都是handler的工作,handler发送消息和取出消息派发两种。一般来说发送消息有两种方法。
send和post。
我们一般称send的Message为消息,其实post中Runnable也表示消息回调。通常post是将消息加入到消息队列中,并不立即执行,例如postDelay(),而send消息是立即执行,等待消息执行完才返回,例如sendMessage()。但是不管是post或者send都是将消息放入到消息队列中,然后立即返回,等待消息循环时获取消息被执行,所以两者的执行时间差别是在消息循环获取消息时产生的。
另外一般来说handler在主线程中创建,会自动绑定主线程。
当new Handler()发生在主线程,handler.post(Runnable runnable)执行的话,Runnable中的run方法会在特定的时间在主线程执行,这样可以防止ui操作在子线程执行。
handler.sendMessage()通常需要在new Handler()中重写handlerMessage方法,对发送的Message进行处理,如果有需要的话由msg.arg1、msg.arg2、msg.obj携带数据,在handlerMessage中对这些数据进行操作。
给自己记录,方便忘记基础理解~
- Android的Handler机制
- android 的handler 机制
- Android的handler机制
- android的handler机制
- Android的Handler机制
- Android的Handler机制
- Android的Handler机制
- android的handler机制
- Android的Handler机制
- Android Handler机制的原理
- [Android]Handler的消息机制
- Android下的Handler机制
- Android通信的Handler机制
- Android handler机制的原理
- 【android】Handler机制的原理
- Android:Handler机制的原理
- Android Handler机制的原理
- android--handler机制的原理
- BZOJ 3489: A simple rmq problem 树套树
- VS+Opencv3.3下用HOG+SVM实现INRIA行人检测
- python 关键字 保留字
- 斯坦福大学机器学习笔记——正则化的逻辑回归模型
- 第二次试验
- Android的Handler机制
- Java将字符串按指定长度分割
- Linux上配置Jupyter Notebook远程访问
- Java多线程:notify/notifyAll/wait/sleep在多线程中的区别于使用
- spring -IOC和DI
- java如何处理linux名字乱码批量重命名问题
- 基于WebSocket的网页端即时通讯
- laravel databas
- (转)Android 使用极光/友盟推送,APP进程杀死后为什么收不到推送