Handler机制的初步理解
来源:互联网 发布:大数据金融的特点 编辑:程序博客网 时间:2024/05/16 04:09
handler机制
1. Handler 文档简单介绍:
Handler类允许你发送和处理消息队列中的消息及runnable对象. Handler实例都是与一个线程和该线程的消息队列一起使用, 一旦创建新的Handler对象, 系统就把该实例和对应的线程及线程的消息队列进行捆绑, handler将发送消息和runnable对象到消息队列中,并当这些消息和runnable对象从消息队列出来后执行.
Handler使用:
1) 定期处理message和runnable对象
2) 将对其他线程操作的对象放入到队列中,避免冲突.
定时处理消息的方法: post(Runnable),postDelayed(Runable, long); sendMessage(msg)等等. Post()方法可以将runnable对象发送给消息队列,并在消息队列接受后被调用.SendMessage()方法可以将含有数据的message对象发送到消息队列中,这些Message对象会被Handler类的handleMessage(msg)方法处理(需要创建一个继承Handler的子类).
当一个进程启动时,主线程独立执行一个消息队列,该队列管理着应用顶层的对象(如:activities、broadcast receivers等等)和所有创建的窗口。你可以创建自己的一个线程,并通过handler来与主线程进行通信。这可以通过在新的线程中调用主线程的 handler的post和sendMessage操作来实现。
2 Handler 机制的图解:
3 Handler类中方法解析:
1.获取消息: 从消息池中获取Message,比new Message()更加便利.
底层都是通过target绑定Message来实现:
2. 发送消息: sendMessage()
底层都通过enqueueMessage()放入到消息队列中去:
3. post()执行runnable对象
handler在调用postXxx()方法时,
1) 将runnable实例赋给msg.callback, 获取到msg.callback的实例Message
2) 将Message拿到sendMessage()去消息队列:
3) Looper轮询器拿到message后,会调用dispatchMessage(msg),此时msg.callback!=null;
4) 最后底层实现依赖:
4. dispatchMessage(msg):
Looper轮询器拿到Message实例后, 通过msg.target.dispatchMessage()来处理消息.
5. remove() 移除message和handler
底层依赖:
5. 两个属性:
m.target=handler
m.callback= runnable
4 Handler的用法:
1. handler发送消息:-----//sendMessage()
应用场景: 子线程网络请求检查是否需要更新, UI线程更改UI:
2. handler 实现定时更改UI,如ViewPager轮播图: ----//post(runnable)
handler实现定时执行runnable对象,一般采用handler.postDelayed(runnable,long), 该方法只会执行一次, 要实现轮播,需要递归调用.
3. handler 带参构造函数:
5 更改UI的三种方式:
Android中操作UI遵从原则:
1. Activity.runOnUiThread();
2. View.post(runnable);
3. handler.post(runnable)
6 handler实现子线程与主线程之间的通讯//TODO:
- Handler机制的初步理解
- Handler机制的理解
- Handler机制的一些理解
- Handler机制-----我的理解
- Handler 机制初步(一)
- 对Handler消息机制的理解
- Android Handler消息机制的理解
- Handler机制的理解与使用
- 关于handler机制的部分理解
- Android中Handler机制的理解
- Android Handler消息机制的理解
- Android<我所理解的Handler机制>
- 对android Handler机制的理解
- 【Android机制】-- Handler运行机制的理解
- Android<我所理解的Handler机制>
- 对Handler机制的”粗“理解
- Android Handler机制的简单理解
- androd 事件分发机制的初步理解
- Objective-C 常见的结构体
- failed to open gcomm backend connection: 13: error while trying to listen 'tcp:/
- mysql自增id归0的方法
- java中的向上转型和向下转型
- 自驾五千公里后
- Handler机制的初步理解
- Objective-C NSDate的使用
- 华为OJ(购物单)
- 用一枚实名戒指来弥补我对你的爱
- I2C总线深入理解
- 你所不知道的foreach
- 思科多nat顺序
- JavaWeb中实现删除修改
- [leetcode] 22.Generate Parentheses