android obtain,Android Message.obtain() 之 高效原因分析

当在学习跨线程机制 Handler 时,一定会接触到 Message.obtain() 方法

当在学习Message.obtain 时,可能有几个疑问:

Message的集合的具体存储结构是怎样的?

两种Message构建方法:Message.obtain() 和 new Message() 之间的区别?

Message.obtain() 调用后获取的链表节点缓存对象会不会形成脏数据?

new Handler().obtainMessage() 和 Message.obtain() 区别?

弄清这几个问题的方式还是从源码入手比较干脆:

问题1:Message的集合的具体存储结构是怎样的?

先抛结论:单链表(MAX_POOL_SIZE = 50)

第1段关键代码位于 Handler.java

在Client调用new Handler().postDelayed()等方法后,沿着调用链,会调用到Handler类关键方法enqueueMessage(),把Message塞入MessageQueue

private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {

msg.target = this;

if (mAsynchronous) {

msg.setAsynchronous(true);

}

return queue.enqueueMessage(msg, uptimeMillis);

}

第2段关键代码位于 Message

你可能感兴趣的:(android,obtain)