Android SimplePool 和 SynchronizedPool 的区别

Android SimplePool 和 SynchronizedPool 的区别

  • SimplePool 简单池和 SynchronizedPool 同步池都属于对象池的实现,都是 android.core.util.Pools 类的一部分,主要用于对象的复用,以此减少对象频繁创建和销毁带来的性能开销(避免频繁触发 GC 操作)
  • SimplePool 和 SynchronizedPool 是基于数组实现的(内部使用一个数组来存储对象)
  • PS:Android Message 类的 Message Pool 是基于链表实现的(通过 Message#obtain 复用消息),Glide 内部的 KeyPool 是基于 Queue 队列实现的,Glide 内部的 BitmapPool 是基于带了 LRU 算法的 Map 实现的

SimplePool

  • SimplePool 是非线程安全的对象池,适用于单线程环境
  • SimplePool 继承自 androidx.core.util.Pools.Pool 接口,通过记录当前池中的对象数量,实现对象的入池和出池操作
  • 对象池的大小在创建时指定,无法动态调整,按需求设置 maxPoolSize,过大的池会浪费内存,过小则无法发挥复用优势
java 复制代码
public class MyPooledObject {
    private static final SimplePool<MyPooledObject> sPool = new SimplePool<>(5);

    public static MyPooledObject obtain() {
        //从对象池中获取对象
        MyPooledObject instance = sPool.acquire(); //获取
        //如果池中没有可用对象就创建一个新的
        return (instance != null) ? instance : new MyPooledObject();
    }

    public void recycle() {
        //将对象放回对象池(存到数组末尾),如果池已满,对象会被丢弃
        sPool.release(this);
    }
}

SynchronizedPool

  • SynchronizedPool 是线程安全的对象池,使用 synchronized 关键字来保证线程安全(在 acquire 和 release 方法上加锁来实现)
  • SynchronizedPool 继承自 SimplePool,是 SimplePool 的同步版本
java 复制代码
public class MySyncPooledObject {
    private static final SynchronizedPool<MySyncPooledObject> sPool = new SynchronizedPool<>(5);

    public static MySyncPooledObject obtain() {
        MySyncPooledObject instance = sPool.acquire();
        return (instance != null) ? instance : new MySyncPooledObject();
    }

    public void recycle() {
        sPool.release(this);
    }
}
相关推荐
二流小码农9 分钟前
鸿蒙开发:UI界面分析利器ArkUI Inspector
android·ios·harmonyos
CYRUS_STUDIO24 分钟前
FART 精准脱壳:通过配置文件控制脱壳节奏与范围
android·安全·逆向
小疯仔29 分钟前
使用el-input数字校验,输入汉字之后校验取消不掉
android·开发语言·javascript
墨狂之逸才1 小时前
Data Binding Conversion 详解
android
iceBin2 小时前
uniapp打包安卓App热更新,及提示下载安装
android·前端
杨充2 小时前
高性能图片优化方案
android
墨狂之逸才2 小时前
BindingAdapter名称的对应关系、命名规则和参数定义原理
android
hellokai2 小时前
ReactNative介绍及简化版原理实现
android·react native
阿豪元代码3 小时前
Perfetto 上手指南3 —— CPU 信息分析
android
宋智孝的小迷弟3 小时前
Android 异步数据流:Kotlin Flow 为何成为新一代“利器”?LiveData 又有何局限?
android·面试·app