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);
    }
}
相关推荐
xiaozongt19892 小时前
MasterGo + Claude Code 生成 Android 布局:完整实践指南
android
Anhty3 小时前
2026最新免费手机音频处理工具 !!
android·功能测试·ios·智能手机·音视频
2501_915909065 小时前
iOS应用从开发到上架App Store的完整发布流程与步骤指南
android·ios·小程序·https·uni-app·webview
狗凯之家源码网5 小时前
AI 步数修改提交系统源码应用场景与落地指南
android·数据库·人工智能·运动步数
ZHOUPUYU6 小时前
PHP 9.0 前瞻:下一代 PHP 会带来哪些新功能?
android·开发语言·php
JMchen6 小时前
性能优化——让Native代码飞起来
android·c++·性能优化
ZHOUPUYU7 小时前
PHP 8.2 的核心高级特性,包括只读类、类型系统增强
android·性能优化·php
ZHOUPUYU7 小时前
PHP 8.0 高级技术实战:从新特性到性能优化
android·性能优化·php
不爱说话郭德纲7 小时前
从“点点点”到一键出包:我把 uni-app x Android 离线打包做成了脚本
android·前端·uni-app
事圆则缓8 小时前
Android 崩溃优化与应用稳定性全解析:Crash、ANR、OOM 到线上治理
android