Handler消息处理机制
2015-11-07 14:35
232 查看
核心思想,在一个线程发送消息,在另一个线程接受消息并处理。
发送消息的线程一般不能进行一些耗时的作业,所以交由另一个线程(处理消息的进程)进行处理。
Handler:和looper进行交流,处理looper从messagequeueu取出的事件分发给handler,发送message给looper;
Looper:循环消息队列,构造方法中构造了一个messagequeue.内涵循环不断取出消息
messagequeue:采用先进先出的方式存储message
message: 通过设定 obj, what ,等字段存储并运输消息
注意主线程 即UI线程中 系统已经初始化了一个Looper. 所以我们在主线程中处理消息(主线程中一般处理UI更新方面的消息)直接创建Handler对象并覆写Handler处理消息的方法即可。
而 子线程即自己创建的线程,如果作为处理消息的进程,则我们需要进行以下处理:
1调用Looper的prepare()方法为当前进程创建Looper对象()创建对象的同时构造器方法会 自动创建MessageQueue。
2创建Handler对象,并覆写Handler处理方法。用来处理其他线程发送的消息。
3调用Looper的loop方法启动looper.
细节心得:其中massge对象常与bundler连用 进行数据的发送,匹配消息时用msg.what 标记进行匹配。将子线程定义在内部类中方便查找子线程的handler.
注意:导包是 os.handler包!!
发送消息的线程一般不能进行一些耗时的作业,所以交由另一个线程(处理消息的进程)进行处理。
Handler:和looper进行交流,处理looper从messagequeueu取出的事件分发给handler,发送message给looper;
Looper:循环消息队列,构造方法中构造了一个messagequeue.内涵循环不断取出消息
messagequeue:采用先进先出的方式存储message
message: 通过设定 obj, what ,等字段存储并运输消息
注意主线程 即UI线程中 系统已经初始化了一个Looper. 所以我们在主线程中处理消息(主线程中一般处理UI更新方面的消息)直接创建Handler对象并覆写Handler处理消息的方法即可。
而 子线程即自己创建的线程,如果作为处理消息的进程,则我们需要进行以下处理:
1调用Looper的prepare()方法为当前进程创建Looper对象()创建对象的同时构造器方法会 自动创建MessageQueue。
2创建Handler对象,并覆写Handler处理方法。用来处理其他线程发送的消息。
3调用Looper的loop方法启动looper.
细节心得:其中massge对象常与bundler连用 进行数据的发送,匹配消息时用msg.what 标记进行匹配。将子线程定义在内部类中方便查找子线程的handler.
Message ms= mhandler.obtainMessage(); ms.what = SEND_ROCK; mhandler.obtainMessage().sendToTarget();//这种Masage方式减少内存开销。
注意:导包是 os.handler包!!
相关文章推荐
- XX转Bitmap,XX转Drawable
- Xib
- 根据Excel的内容和word模板生成对应的word文档
- 虚方法的重写与普通方法的隐藏的区别;抽象方法和虚方法有什么区别?
- failed to load the jni shared jvm.dll
- 自然语言处理
- playframework 任务计划程序
- VC释放资源文件DLL,EXE等。。。
- 禁止表单自动提示缓存数据
- Android学习笔记--存储方案(SharedPreference、文件IO)
- python之smtplib模块 发送邮件
- android 判断滑动事件或者点击事件
- HDU3183 RMQ/贪心
- 顺序表的定义及基本操作
- 关于Flex的MessageBroker Endpoints channels的配置运用
- Ubuntu和Windows默认系统启动顺序修改
- POJ 2831 次小生成树
- 堆排序
- Flowing Water
- 一个简单json数据提交实例