Handler机制的初步理解
2015-08-18 18:10
459 查看
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:
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories