【Android】Handler.obtain源码分析

本文分析了Android中Handler的obtain()方法,揭示其如何避免频繁创建Message对象,提高性能。建议在发送多条消息时使用Handler.obtain(),而非直接new Message。详细探讨了obtain()的源码,通过示例演示了不同方式获取Message对象及其应用场景。
摘要由CSDN通过智能技术生成

一、摘要

Handle是我们项目中经常去运用的一项处理异步消息的方式,而创建消息的时候,使用不当会导致不必要的对象创建

二、背景

发送多条消息时会造成内存增大,效率低下

三、推广建议

创建消息,使用Handler.obtain,不用new Message

四、正文

1、跟踪Message.java中的obtain()方法如下:

private static final Object sPoolSync = new Object();
private static Message sPool;
private static int sPoolSize = 0;

private static final int MAX_POOL_SIZE = 10;

/**
* Return a new Message instance from the global pool. Allows us to
* avoid allocating new objects in many cases.
*/
public static Message obtain() {
   
	synchronized (sPoolSync) {
   
		if (sPool != null) {
   
			Message m = sPool;
			sPool = m.next;
			m.next = null;
			sPoolSize--;
			return m;
		}
	}
	return new Message();
}

从obtain()的源代码中我们可以知道,它是静态方法,而且只有在spool = null 的情况下才会new出一个Message(),返回一个Message对象,如果在不为空的情况下,Message的对象都是从Message对象池里面拿的实例从而重复使用的,这也为了An

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值