Android中的Message Pool实现

 为了避免对象频繁创建销毁带来的开销,可以采用一个pool来维护这些对象,对象使用后可重新放到pool中被重新使用。

Message是一个被频繁使用的对象,因此Message提供了一个message pool。下面是message pool的实现。

obtain方法用来从pool中获取一个Message对象,一旦消息被处理后可以调用recycle方法将该对象放入pool。即使message是通过new方式创建的,仍然可以放入pool中进行回收。

下面的pool实际上是一个stackobtainpop, recyclepop,只是比较简单,仅仅通过一个可以链到下一个messagemessage 对象记录栈顶。

 

public final class Message implements Parcelable {

    // memebers

public int what;

/*package*/ Message next;

 

    private static Object mPoolSync = new Object();

    private static Message mPool;

    private static int mPoolSize = 0;

 

private static final int MAX_POOL_SIZE = 10;

 

        public Message() {

}

 

    public static Message obtain() {

        synchronized (mPoolSync) {

            if (mPool != null) {

                Message m = mPool;

                mPool = m.next;

                m.next = null;

                return m;

            }

        }

        return new Message();

}

 

 

    public void recycle() {

        synchronized (mPoolSync) {

            if (mPoolSize < MAX_POOL_SIZE) {

                clearForRecycle();

               

                next = mPool;

                mPool = this;

            }

        }

}

 

    /*package*/ void clearForRecycle() {

        what = 0;

        …

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值