Android中的Message Pool实现

来源:互联网 发布:淘宝卖家未发货前退款 编辑:程序博客网 时间:2024/05/18 00:04

 为了避免对象频繁创建销毁带来的开销,可以采用一个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;

        …

}

}

原创粉丝点击