前言:

对象池是对一些常用对象的回收再利用,这样就可以避免创建大量对象,避免对象创建后被GC 回收,然后再次创建,可以解决一些类似于内存抖动的问题。

在Android 里面大量使用了这种思想,总结一些常用的案例:

Message

    /*** 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;m.flags = 0; // clear in-use flagsPoolSize--;return m;}}return new Message();}

VelocityTracker

    private static final SynchronizedPool<VelocityTracker> sPool =new SynchronizedPool<VelocityTracker>(2);static public VelocityTracker obtain() {VelocityTracker instance = sPool.acquire();return (instance != null) ? instance : new VelocityTracker(null);}

MotinEvent

    static private MotionEvent obtain() {final MotionEvent ev;synchronized (gRecyclerLock) {ev = gRecyclerTop;if (ev == null) {return new MotionEvent();}gRecyclerTop = ev.mNext;gRecyclerUsed -= 1;}ev.mNext = null;ev.prepareForReuse();return ev;}

Parcel

    /*** Retrieve a new Parcel object from the pool.*/public static Parcel obtain() {final Parcel[] pool = sOwnedPool;synchronized (pool) {Parcel p;for (int i=0; i<POOL_SIZE; i++) {p = pool[i];if (p != null) {pool[i] = null;if (DEBUG_RECYCLE) {p.mStack = new RuntimeException();}p.mReadWriteHelper = ReadWriteHelper.DEFAULT;return p;}}}return new Parcel(0);}

RecyclerView

    public final class Recycler {final ArrayList<ViewHolder> mAttachedScrap = new ArrayList<>();ArrayList<ViewHolder> mChangedScrap = null;final ArrayList<ViewHolder> mCachedViews = new ArrayList<ViewHolder>();private final List<ViewHolder>mUnmodifiableAttachedScrap = Collections.unmodifiableList(mAttachedScrap);private int mRequestedCacheMax = DEFAULT_CACHE_SIZE;int mViewCacheMax = DEFAULT_CACHE_SIZE;RecycledViewPool mRecyclerPool;

Android 对象池案例相关推荐

  1. android+对象池使用,Android开发中对高并发对象池的重复利用

    这两天在整理一套Android的路由框架,在整理的过程中,发现在路由消息传递过程中,传输载体类会大量的生成,对于这种载体类来说,他们本身是可重复利用的,并不需要大量的创建,大量的废弃,所以,我打算引入 ...

  2. Android 内存优化-对象池★

    1.对象池 内存优化不仅要防止内存泄露,也要注意频繁GC卡顿.内存抖动以及不必要的内存开销造成的内存需求过大或者内存泄露. 比如,如果有大量临时对象的创建该如何处理呢? 首先要确定问题发生的原因,对象 ...

  3. Android 线程池概念及使用

    一:使用线程池的原因 在android开发中经常会使用多线程异步来处理相关任务,而如果用传统的newThread来创建一个子线程进行处理,会造成一些严重的问题: 在任务众多的情况下,系统要为每一个任务 ...

  4. 对象池回收对象_回收对象以提高性能

    对象池回收对象 总览 在上一篇文章中,我说过对象反序列化更快的原因是由于使用了回收对象. 由于两个原因,这可能令人惊讶:1)相信如今创建对象是如此之快,无关紧要或与回收自己一样快,2)默认情况下,任何 ...

  5. android 线程池

    为什么用线程池 创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率 例如: 记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3 如果T1+T3>T2 ...

  6. 抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现

    本系列Netty源码解析文章基于 4.1.56.Final版本 最近在 Review Netty 代码的时候,不小心用我的肉眼抓到了一个隐藏很深很深的内存泄露 Bug. 于是笔者将这个故事-哦不 -事 ...

  7. Unity3d--基于对象池优化思想的音频管理系统

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Resource文件夹下的音效片段目录 二.采用单例模式作为全局访问方式 三.音效类型分类 四.播放音效的组件池的 ...

  8. Android 线程池的使用

    线程池优点 提到线程池就必须先说一下线程池的优点,线程池的优点可以概括为以下四点: * 重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销: * 线程池旨在线程的复用,就避免了创建线程和销毁 ...

  9. Unity对象池技术

    Unity对象池技术 https://blog.csdn.net/LemonXQ/article/details/77148886 顾名思义,对象池是存放对象的缓冲区.用户可以从缓冲区中放入/取出对象 ...

最新文章

  1. 洛谷 P1387 最大正方形
  2. 计算机科学专业毕业?这是给你的职业建议(亮点在最后)
  3. 重新精读《Java 编程思想》系列之final关键字
  4. Zynq UltraScale + MPSoC示例设计 - 在64位Linux上执行32位应用程序
  5. 成功解决tensorflow\contrib\learn\python\learn\datasets\mnist.py: maybe_download (from tensorflow.contri
  6. linux之用xargs删除这个目录下面后缀为txt的文件(包括子目录)
  7. 深入理解Java ClassLoader及在 JavaAgent 中的应用
  8. Win7系统打印机删除不掉的解决方法
  9. centos7源码安装mysql8.0_CentOS7下源码安装MySQL 8.x
  10. 802.11n协议解析(一)
  11. 输出华氏-摄氏温度转换表(15分)
  12. service获取selinux权限_Spring Boot 整合 Spring Security 示例实现前后分离权限注解 + JWT 登录认证...
  13. eclipse断点不能下一步_大盘下一步这样走,不能错过
  14. 【数学建模算法汇总】
  15. java-面向对象高阶
  16. 2021年全国职业院校技能大赛 “大数据技术与应用”—模拟赛题(二)
  17. 招聘面试的STAR原则
  18. react具名插槽与作用域插槽
  19. java毕业设计校园快递柜存取件系统(附源码、数据库)
  20. 【 无线网络技术 】实验一、构建无线网络实验环境

热门文章

  1. sql 增加自增列 耗时长_SQLServer为已有数据的表添加一个自增列
  2. python 插值_三次样条插值在Python中的实现
  3. 二叉树的基本特性和二叉树的几种基本操作的机制_笃学不倦|二叉树(一)
  4. 9.如何使用QT绘制导航箭头的图标
  5. opencv中stereoCalibrate函数双目标定
  6. qstring删除最后一个字符_Excel去掉最后一个字符两个方法,正反思维,你支持哪一个?...
  7. 利用欧拉角旋转正交_张量旋转=矩阵旋转?
  8. Android图片放对应的drawable文件夹
  9. SpringtMVC中配置 mvc:annotation-driven/ 与 mvc:default-servlet-handler/ 的作用
  10. Facebook高管:我们是科技公司 不是媒体公司