最近在继续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. Google Android操作系统内核编译图文教程
  2. [实战示例] 带您深入探讨 Android(安卓)传感器【附源码】
  3. android:padding和android:layout_margin的区别
  4. 如何使用Android(安卓)SDK开发Android应用
  5. Android(安卓)APP支持RTL模式
  6. Android当中的MVP模式(七)终篇---关于对MVP模式中代码臃肿
  7. 2019零基础学Android第1课——Android开发环境搭建
  8. 浅谈Android中MVC、MVP、MVVM模式(二)
  9. Android(安卓)SDK开发Android应用

随机推荐

  1. Mac Error Create Android(安卓)Project
  2. Android简单画板的实现
  3. Android(安卓)Weekly Notes Issue #234
  4. Managing Projects from Eclipse with AD
  5. Android(安卓)为Notification加上一个进
  6. 利用xml文件创建Menu
  7. 在Android上做List Remove的时候遇到的异
  8. android adb shel l命令使用 解决 Read-o
  9. Android(安卓)Studio与 Android(安卓)SDK
  10. Android用http协议上传文件