Android 对象池的简单实现

本文介绍Android对象池的几种实现方式,包括SimplePool、AutoReleasePool和SynchronizedPool,并通过实例展示了对象池对于性能的显著提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 对象池的简单实现


首先简单说一下为什么要使用对象池,使用对象池的主要原因是防止短时间内频繁大量的创建和销毁对象,也就是频繁GC,引起内存抖动,导致影响我们应用的性能。

在这里插入图片描述



package com.qumitech.common.pool

/**
 * author       : hnliu
 * e-mail       : 1017928908@qq.com
 * create date  : 2020/09/12
 * description  :管理对象池的接口
 */
interface Pool<T> {
   
    // 返回一个对象实例,如果对象池里面有则从里面直接取一个,没有则创建一个对象
    fun get(): T?
    // 释放一个实例到对象池
    fun recycle(instance: T): Boolean
    // 清空对象池
    fun clear()
}


简单对象池,实现了从池子里面取一个对象出来,往对象池里面添加对象,清除对象池等简单操作


package com.qumitech.common.pool

import android.os.Handler
import android.os.Looper.getMainLooper
import android.util.Log
import com.qumitech.common.xlog.XLogExt

/**
 * author       : hnliu
 * e-mail       : 1017928908@qq.com
 * create date  : 2020/09/12
 * description  : 简单的对象池
 */
open class SimplePool<T>(maxPoolSize: Int) : Pool<T> {
   

    class PoolObj<T>(val obj: T, var startTime: Long?)

    val mPool: Array<PoolObj<T>?>
    var mPoolSize = 0

    override fun get(): T? {
   
        if (mPoolSize > 0) {
   
            val lastPooledIndex = mPoolSize - 1
            val instance = mPool[lastPooledIndex]?.obj
            mPool[lastPooledIndex] = null
            Log.i("SimplePool", "从对象池获取一个对象:${
     instance}, 当前对象数量:${
     mPoolSize}")
            mPoolSize--
            return instance
        }
        return null
    }

    override fun recycle(instance: T): Boolean {
   
        check(!isInPool(instance)) {
    "Already in the pool!" }
        if (mPoolSize < mPool.size) {
   
            mPool[mPoolSize] = PoolObj(instance, System.currentTimeMillis())
            mPoolSize++
            Log.i("SimplePool", "回收一个对象:${
     instance}, 当前对象数量:${
     
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值