Android 缓存池工具类
前言
今天看到一个不错的缓存池,分享给大家。
代码地址:androidx.core.util.Pools
Pool
/*** Interface for managing a pool of objects.** @param <T> The pooled type.*/public interface Pool<T> {/*** @return An instance from the pool if such, null otherwise.*/@NullableT acquire();/*** Release an instance to the pool.** @param instance The instance to release.* @return Whether the instance was put in the pool.** @throws IllegalStateException If the instance is already in the pool.*/boolean release(@NonNull T instance);}
这个是一个接口,只有两个方法,1.请求一个缓存对象,2.把不需要的对象放到缓存池里面。
SimplePool
/*** Simple (non-synchronized) pool of objects.** @param <T> The pooled type.*/public static class SimplePool<T> implements Pool<T> {private final Object[] mPool;private int mPoolSize;/*** Creates a new instance.** @param maxPoolSize The max pool size.** @throws IllegalArgumentException If the max pool size is less than zero.*/public SimplePool(int maxPoolSize) {if (maxPoolSize <= 0) {throw new IllegalArgumentException("The max pool size must be > 0");}mPool = new Object[maxPoolSize];}@Override@SuppressWarnings("unchecked")public T acquire() {if (mPoolSize > 0) {final int lastPooledIndex = mPoolSize - 1;T instance = (T) mPool[lastPooledIndex];mPool[lastPooledIndex] = null;mPoolSize--;return instance;}return null;}@Overridepublic boolean release(@NonNull T instance) {if (isInPool(instance)) {throw new IllegalStateException("Already in the pool!");}if (mPoolSize < mPool.length) {mPool[mPoolSize] = instance;mPoolSize++;return true;}return false;}private boolean isInPool(@NonNull T instance) {for (int i = 0; i < mPoolSize; i++) {if (mPool[i] == instance) {return true;}}return false;}}
有一个简单的实现类,实现方法很简单,把释放的对象放到了数组里面。
SynchronizedPool
/*** Synchronized) pool of objects.** @param <T> The pooled type.*/public static class SynchronizedPool<T> extends SimplePool<T> {private final Object mLock = new Object();/*** Creates a new instance.** @param maxPoolSize The max pool size.** @throws IllegalArgumentException If the max pool size is less than zero.*/public SynchronizedPool(int maxPoolSize) {super(maxPoolSize);}@Overridepublic T acquire() {synchronized (mLock) {return super.acquire();}}@Overridepublic boolean release(@NonNull T element) {synchronized (mLock) {return super.release(element);}}}
继承自SimplePool,唯一的区别是加了一把锁。
谁在用?
RecycleView 在使用这个工具类。
androidx.recyclerview.widget.AdapterHelper#mUpdateOpPool
Android 缓存池工具类相关推荐
- android自定义线程池工具类,妈妈再也不用担心你不会使用线程池了(ThreadUtils)...
为什么要用线程池 使用线程池管理线程有如下优点:降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行. 提高线程的可 ...
- Android常用的工具类
2019独角兽企业重金招聘Python工程师标准>>> 最新最准确内容建议直接访问原文:Android常用的工具类 主要介绍总结的Android开发中常用的工具类,大部分同样适用于J ...
- 一个bitmap缓存的工具类
项目中用到了很多图片,所以写了个bitmap缓存的工具类 package cn.com.shine.pdi.hptv.util;import android.graphics.Bitmap; impo ...
- Android开发常用工具类集合
转载自:https://blog.csdn.net/xiaoyi_tdcq/article/details/52902844 Android开发常用工具类集合 android开发中为了避免重复造轮子, ...
- android 快速开发工具类,android面试知识点
项目地址:570622566/FastAndrUtils 简介:android 快速开发工具类 更多:作者 提 Bug 官网 标签: Fastandrutils 是一套整理修改整合的 and ...
- Android使用的工具类
Android实用的工具类 https://github.com/AbrahamCaiJin/CommonUtilLibrary#获取app应用版本信息--appapplicationmgr
- 退出整个Android程序的工具类
在实际的Android开发过程中常常有退出整个Android程序的需求,下面给大家介绍一下如何编写一个退出整个Android程序的工具类 package com.superGao.exitApp; i ...
- Android软键盘工具类
Android软键盘工具类 public class SoftKeyboardUtils {/*** 隐藏或显示软键盘* 如果现在是显示调用后则隐藏 反之则显示*/public static void ...
- android 单位转换工具,Android单位转换工具类
Android单位转换工具类 Android单位转换工具类主要由以下4部分构成 1.这个类不能被初始化 2.dip转px接口 3.sp转px接口 4.px转dip接口 代码如下: import and ...
最新文章
- 20180521 数组转换
- 关于“如何破坏单例“我说了好几种方式,面试官却说:我其实随便问问,没想到你真会
- html5重新加载页面,使用AngularJSHTML 5模式重新加载页面会产生错误的GET请求
- 数字时代职业生涯规划
- django html文本编辑器,django xadmin 集成DjangoUeditor富文本编辑器
- 用python画竹子_?【蟒蚺迷】BAMBOO BALLPYTHON!
- NLP(新闻文本分类)——数据读取与数据分析
- 沉船会有什么_世界六大沉船,最后一艘有40吨财宝!8吨黄金!你眼红了吗?
- 计算机专业学生前端该怎么自学?
- TIPS:My导入数据中文乱码解决方案
- 修改浏览器 User-Agent
- .NET(C#、VB)APP开发——Smobiler平台控件介绍:AliPay组件
- C语言----最长公共子串(动态规划)
- 【面试题】总结最高频软件测试|思维发散|计算机基础|Linux|测试用例|接口测试|等技术面试题
- STM32之俄罗斯方块
- 从 radix tree 到 xarray
- 电影评论分类:二分类问题(IMDB数据集)
- vue中使用市区(地区)联动 复制三步完成
- 一个极其简单的用golang net写的tcpip echoserver
- python在园林中的应用_浅析亭在园林中的应用
热门文章
- mysql 第一天_MySQL第一天
- cdh 安装_CDH 中为spark 安装 python3
- win7如何取消计算机管理员权限,win7如何删除需要管理员权限的文件夹
- pytest测试实战 电子书_pytest实战APL测试框架
- Android与iOS:谁更适合HTML 5?
- cheked复选框返回值的时候选中
- # 可视化工具资源汇总
- 管理数据,应用程序和主机安全-B
- 《Linux From Scratch》第三部分:构建LFS系统 第八章:让LFS系统可引导 - 8.2. 创建 /etc/fstab 文件...
- java中如何取到一个对象的所有属性值,并且在创建一个相同的对象