在了解总资产管理器之前, 我们需要先达成一个共识, 即: 所有的资产, 都可以按照如下两种方式划分: 1. 可按照是否正在使用, 分为正在使用的资产(UseingAsset)和未使用的资产(UnusedAsset) 2. 可按照类别是否相同, 分为图片(Image)、视频(Video)、音频(Audio), Ui纹理(UiTexture),3D纹理(3DTexture)等。 资产管理器实现的**核心宗旨**, 是保证应用内的所有资产尽量不超过指定的总大小。具体来说, 即: 当所有资产的总大小超过指定总大小时, 资产管理器会自动释放部分未使用的资产, 以保证总大小不超过指定总大小。这个目标听起来似乎很简单,但要兼顾资产管理器的性能,程序的可维护性,我们需要做更复杂的事情。 以Ui纹理(UiTexture),3D纹理(3DTexture)为例。 假定资产管理器中只存在**UiTexture**,**3DTexture**两类资产, 资产管理器配置的总容量配置为200MB,当前资产管理器管理的**UiTexture**有200MB,其中有30MB是正在使用, 另外170M是未被使用,此时,在应用中打开3D场景,需要在资产管理器中加载30MB的**3DTexture**,我们希望能将**UiTexture**中未使用的170MB的部分(30MB)丢弃, 以使得资产总量尽量维持在200MB以内。 一个简单的做法是, 往资产管理器中push任何一个资产,都关心所有类别的自资产持有情况,即在push 3D资产时,要判断**UiTexture**的持有情况, 如果**UiTexture**的持有情况满足释放条件,则释放**UiTexture**,然后再push 3D资产。但是,如果不止存在两种类别的资产, 假如有30中资产类别, 最差的情况, 我们需要判断30次,才能确定应该释放哪个资产或者无资产可释放 资管管理器已经考虑过以下情形,并针对这些情形制定了**围绕资产管理器核心宗旨**的**相对合理的解决方案**, 我们以Ui纹理(UiTexture),3D纹理(3DTexture)为例,来解释一下资管管理器是如何应对这些情形的。 假定资产管理器中只存在**UiTexture**,**3DTexture**两类为例, 资产管理器配置的总容量为200MB: ### 情形1 **情形描述**:当前资产管理器管理的**UiTexture**有200MB,其中有30MB是正在使用, 另外170M是未被使用,此时,在应用中打开3D场景,需要在资产管理器中加载30MB的**3DTexture** **应对方法**:将**UiTexture**中未使用的170MB的部分丢弃, 以使得资产总量尽量维持在200MB以内 ### 情形2 **情形描述**:假定当前资产管理器管理的**UiTexture**有200MB,其中有30MB是正在使用, 另外170M是未被使用,此时,在应用中打开3D场景,需要在资产管理器中加载30MB的**3DTexture** **应对方法**:将**UiTexture**中未使用的170MB的部分丢弃, 以使得资产总量尽量维持在200MB以内