Code Fragment-Message Pool的实现与处理
来源:互联网 发布:淘宝评价管理登录 编辑:程序博客网 时间:2024/06/06 03:35
Android Message实现处理大致如下
涉及到的几个问题
- Message的数据结构:通过next成员,保持一种链表的链接关系
// sometimes we store linked lists of these things/*package*/ Message next;
- pool的处理
- 形式:就是一个静态的节点,由于next的链表结构,能够保持一种链接。其中sPool总是指向最上面的meesage pool中最上面的message对象。
private static Message sPool;
- 大小:
- 初始大小
private static int sPoolSize = 0;
- 限制大小
private static final int MAX_POOL_SIZE = 10;
- 初始大小
- 形式:就是一个静态的节点,由于next的链表结构,能够保持一种链接。其中sPool总是指向最上面的meesage pool中最上面的message对象。
- 增长
public void recycle() { clearForRecycle(); synchronized (sPoolSync) { if (sPoolSize < MAX_POOL_SIZE) {//判断大小是否满足最大值 next = sPool; sPool = this; sPoolSize++;//设置增长 } }}
- 减少
public static Message obtain() { synchronized (sPoolSync) { if (sPool != null) { Message m = sPool; sPool = m.next; m.next = null; sPoolSize--;//减少 return m; } } return new Message();}
- 节点增删
- 向pool中添加节点
public void recycle() { clearForRecycle(); synchronized (sPoolSync) { if (sPoolSize < MAX_POOL_SIZE) {//判断当前pool的大小,当已经满足pool的上限的时候,不再添加 next = sPool;//把当前节点的next指向pool中最上面的节点,建立链表关系 sPool = this;//把sPool指针上移,指向新添加的节点 sPoolSize++; } }}
- 从pool中获取节点
public static Message obtain() { synchronized (sPoolSync) { if (sPool != null) {//判断pool是不是空的,如果非空,从pool里取出最上面的节点 Message m = sPool;//获取最上面message的引用 sPool = m.next;//sPool节点下移,相当于将上面的节点弹出。 m.next = null; sPoolSize--;//大小减一 return m; } } return new Message();//如果pool是空的,直接创建一个新的message去使用}
- 向pool中添加节点
- 线程安全
- 同步对象
private static final Object sPoolSync = new Object();
- 增删加锁
public static Message obtain() { synchronized (sPoolSync) { if (sPool != null) {//加锁 ...//从pool中弹出message } } .... }
public void recycle() { .... synchronized (sPoolSync) {//加锁 if (sPoolSize < MAX_POOL_SIZE) { ...//向pool中添加message } }}
- 同步对象
- Code Fragment-Message Pool的实现与处理
- Code Fragment-Message Pool的实现与处理
- Android中的Message Pool实现
- javascript task pool的设计与实现
- 关于fragment响应回退键的处理与fragment的删除
- Message(Message Pool)源码分析
- 使用Bundle+Message+Handler实现Fragment与Activity通信(可互传数据互调用方法)
- Fragment 与 旋转屏幕的细节处理
- [推荐]Android消息处理机制(Handler、Looper、MessageQueue与Message) Android是消息驱动的,实现消息驱动有几个要素: 消息的表示:Message 消息
- 对call完某给T-CODE或者是BAPI等返回message的处理
- MessageQueue&Message Pool—消息的读写、删除和回收
- Android的Message Pool是个什么鬼,Message Pool会否引起OOM——源码角度分析
- fragment与activity及两个fragment之间的跳转实现
- fragment与activity及两个fragment之间的跳转实现
- fragment与activity及两个fragment之间的跳转实现
- fragment与activity及两个fragment之间的跳转实现
- fragment与activity及两个fragment之间的跳转实现
- fragment与activity及两个fragment之间的跳转实现
- 输出HTML的Servlet
- HDU-2040
- 提高php代码质量 36计
- UVA10161Ant on a Chessboard
- servlet相关知识笔记
- Code Fragment-Message Pool的实现与处理
- 2013-07-18第一次Product BackLog会议
- 手动设置MyEclipse 的代码自动提示功能
- HDU-2041
- HDU1010 Tempter of the Bone
- Top 10 Open Source Web Application Firewalls (WAF) for WebApp Security
- Android layer-list
- sgu 101 Domino 欧拉路径+DFS
- HDU-2042