消息框架的一种实现
2016-03-17 20:00
330 查看
自从在Android中用上了消息框架,屡试不爽。不管是主线程发任务到后台线程,还是后台线程返回结果到主线程,甚至是完全在主线程中的调用,都用发消息-监听消息-收消息这种方式处理,真是解耦利器。
之前写过的两篇文章:用消息机制获取网络数据 和 用消息机制解耦Activity跳转。
之前在工程中都用的是开源的EventBus,很好用,但是因为是定制好的,缺少很多灵活性,监听方法不可改名,不可从父类override,不可以通过泛型参数声明,等等。
自己尝试用Handler实现了一个消息框架,还没完全搞明白,目前可以满足一个小工程用的需求。几个角色:
IMessage,定义消息,封装业务需求、业务数据,比如网络请求消息,网络请求结果返回消息,activity跳转消息等;
IMessageListener<? extends IMessage>, 消息监听器,泛型声明了一个消息的类型,就是说一个消息监听器,负责监听某一类的消息。这个由监听消息的业务类去实现;
MessageCenter, 消息中心,维护一个IMessageListener列表,接收IMessage来发送消息,收到消息后,通过遍历IMessageListener列表把消息实体分发给对应的监听器。核心方法有三个:registListener, unRegistListener, sendMessage,分别是注册监听器,解注册监听器,发送消息。其内部实现是两个Handler,一个是主线程的Handler,负责在主线程接收消息,另一个是一个后台线程的Handler,负责在后台线程接收消息,这样消息一收到就会在后台线程中异步执行,不需要客户代码自己起异步线程。
所有代码在Gist: An Implementation of Android Message Framework.
https://gist.github.com/Viyu/a29bc80c62a244609287
之前写过的两篇文章:用消息机制获取网络数据 和 用消息机制解耦Activity跳转。
之前在工程中都用的是开源的EventBus,很好用,但是因为是定制好的,缺少很多灵活性,监听方法不可改名,不可从父类override,不可以通过泛型参数声明,等等。
自己尝试用Handler实现了一个消息框架,还没完全搞明白,目前可以满足一个小工程用的需求。几个角色:
IMessage,定义消息,封装业务需求、业务数据,比如网络请求消息,网络请求结果返回消息,activity跳转消息等;
IMessageListener<? extends IMessage>, 消息监听器,泛型声明了一个消息的类型,就是说一个消息监听器,负责监听某一类的消息。这个由监听消息的业务类去实现;
MessageCenter, 消息中心,维护一个IMessageListener列表,接收IMessage来发送消息,收到消息后,通过遍历IMessageListener列表把消息实体分发给对应的监听器。核心方法有三个:registListener, unRegistListener, sendMessage,分别是注册监听器,解注册监听器,发送消息。其内部实现是两个Handler,一个是主线程的Handler,负责在主线程接收消息,另一个是一个后台线程的Handler,负责在后台线程接收消息,这样消息一收到就会在后台线程中异步执行,不需要客户代码自己起异步线程。
所有代码在Gist: An Implementation of Android Message Framework.
https://gist.github.com/Viyu/a29bc80c62a244609287
相关文章推荐
- 复利计算软件v3
- 数字签名和数字证书到底是个神马玩意?
- 《微时间管理术》心得分享
- 如何使用List.toArray()转换为数组对象
- select poll epoll使用示例
- 第一次见python
- Java集合框架:EnumMap
- iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总
- 今日面试不会的题目
- leetcode:Move Zeroes 【Java】
- Java集合框架:EnumMap
- uboot与Linux内核机器码
- android项目bug及解决方法小记录
- {error,{bad_return,{{xxapp,start,[normal,[]]},ok}}}
- New Concepts (Mathmatic one)
- opencv中图像异或函数bitwise_xor
- 前三次复利计算程序的总结
- 可以正确显示表格线的Grid item view
- HDU 4704 Sum 费马小定理
- Problem F