AssetBundle缓存资源删除问题

在android原生平台尝试使用bundle.releastAll()函数释放已经缓存的bundle资源,按照官方文档的说法releaseAll()应该是会移除缓存资源的。但是实际没有。不知道是我理解有问题还是,缓存机制存在bug。

这个是文档中对于releaseAsset 和releaseAll的说明

这个是我移除bundle的代码,断点看是有调用到releaseAll,并且也调用了 removeBundle

这个是调用releaseAll和removeBundle后通过cc.assetManage.cacheManager.cachedFiles打印的缓存信息,对应得bundle资源还在

我是使用真机远程调试断点打印得,不知道哪位大佬能帮忙解惑

1赞

补充信息,断点看releaseAll方法里找不到asset得信息,根本没有走releaseManager.tryRelase

难道需要换一个比较霸气得帖子名字才会有大佬关注么

新的缓存机制里类似引用计数,你其他地方引用到了就+1,释放了就-1,最后如果为0才释放。你这里没释放,说明其他地方有引用,计数不为0

@wstcok2003 谢谢提供思路,考虑过引用计数得问题

1.关于引用计数,仔细研究了下官方得文档


意思是如果是动态加载得资源并且设置给场景或其他资源,则引用计数是没有记录。
我得理解是
1.assetbundle也是通过load加载,所以assetbundle里得资源应该不存在引用计数导致资源释放不了得问题,除非我手动增加了引用计数。
2.测试时,我得一个assetbundle里缓存了150个资源(本地目录缓存),就算我只加载了其中一个界面,然后调用releaseAll和removeBundle后,还是有150个缓存资源。

我这里说得是缓存在本地目录得资源,并不是内存中得资源。

官方文档对于 AssetBundle 得release函数得描述是 删除缓存引用,并且清理它得资源内容。

目前测试cc.assetmanager.cachemanager.clearCache()是能够清理本地缓存得,但是这个函数会将所有得缓存清理干净,没法针对某个AssetBundle得缓存资源进行清理

问题已解决
1.assetbundle提供得函数只是释放内存资源,跟缓存资源没有关系
2.缓存资源相关得需要使用cc.assetManager.cacheManager 处理

删除 android 缓存得assetbundle资源得方法为
> let cacheFiles = cc.assetManager.cacheManager.cachedFiles;
> if(cacheFiles){
> cacheFiles.forEach((file,key) => {
> if(file.bundle && file.bundle == bundleName){
> cc.assetManager.cacheManager.removeCache(key);
> }
> });
> }

2赞

cc.assetManager.cacheManager.cachedFiles
2.4.2 没有这个cachedFiles 这是属性,大佬用的哪个版本?

原生才有这个属性,web上没有,所以判断了下cacheFiles是否存在

2.4.4版本的 cc.assetManager.cacheManager.removeCache
版本不能传参数,请问怎么搞????

源码是有的,

直接传参就可以了,比较介意报错的话,可以在creator.d.ts类中补充对应的参数

1赞

//@ts-ignore :crazy_face: