最近在继续iPhone 业务的同时还需要重新拾起Android 。在有些生疏的情况下,决定从Android 源码中感悟一些Android 的风格和方式。在学习源码的过程中也发现了一些通用的模式,希望通过一个系列的文章总结和分享下。
    享元模式是一种针对大量细粒度对象有效使用的一种模式。Android中的Message、Parcel和TypedArray都利用了享元模式。以Message为例,类图如下:     其中Message通过next成员变量保有对下一个Message的引用,从而构成了一个Message链表。Message Pool就通过该链表的表头管理着所有闲置的Message,一个Message在使用完后可以通过recycle()方法进入Message Pool,并在需要时通过obtain静态方法从Message Pool获取。实现代码如下: public final class Message implements Parcelable {
    ......
    // sometimes we store linked lists of these things
    /*package*/ Message next;
    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();
    }
    ......
    public void recycle() {
        synchronized (sPoolSync) {
            if (sPoolSize < MAX_POOL_SIZE) {
                clearForRecycle();
                next = sPool;
                sPool = this;
                sPoolSize++;
            }
        }
    }
    ......
    /*package*/ void clearForRecycle() {
        what = 0;
        arg1 = 0;
        arg2 = 0;
        obj = null;
        replyTo = null;
        when = 0;
        target = null;
        callback = null;
        data = null;
    }
}

更多相关文章

  1. Android源码 半小时下完Android系统源码
  2. 深刻解析 Android(安卓)的 AIDL 介面
  3. 【原创】Android(安卓)耗电信息统计服务——BatteryStats源码分
  4. eclipse中关联源码
  5. Android底層系統服務開發:以MediaRecorder模組為例
  6. 图解 Android(安卓)动画中 android:pivotX 和 android:pivotY 属
  7. Android(安卓)AsyncTask完全解析,带你从源码的角度彻底理解
  8. Android学习手记:第一个应用程序!
  9. Android(安卓)Dialog使用举例

随机推荐

  1. Android(安卓)Studio入门(3)—如何集成模拟
  2. Android经典蓝牙基础(一)
  3. [置顶] [Android基础]Android中SharedPrefe
  4. Android Handler机制2--ThreadLocal
  5. Android(安卓)OTA升级原理 - 实现流程(整
  6. Android Studio安装与配置
  7. 通过xml布局文件实现按钮改变焦点设置背
  8. Android viewpager 实现画廊效果 左右可
  9. android:backgroundDimEnabled的作用
  10. android全平台编译libjpeg-turbo并基于AN