记一次排坑:在IOS中播放IronSource的RewardedVideo时,内存泄露导致闪退

Unity版本:2020.3.6

IronSource:7.3.0.1

XCode:14.3

现象:项目初始化IronSource之后,调用播放广告时内存不断上升。调用代码很简单

IronSource.Agent.showRewardedVideo();

 

排查步骤:

1、使用IronSource的Demo、打包、播放RewardedVideo:不崩溃

2、在现有项目中的起始Scene中,直接写按钮调用IronSorce播放RewardedVideo:不崩溃

3、切换至游戏场景,直接调用IronSource播放:崩溃。分析:

  a)场景内有影响IronSource播放的代码

  b)场景内的光、UI组件、或渲染机制导致播放视频时触发某bug,导致内存上升

4、隐藏光、Post-Process Volumn等滤镜组件:崩溃。(这一部骤可以整合到后续,打包浪费了时间)

5、二分法隐藏场景内一半的GameObject,简单处理脚本报错后打包。——不崩溃。分析:此次隐藏了UI的根Canvas节点,会不会是TextMeshPro里的Shader影响?

6、显示Canvas节点,隐藏子节点中一半的UI面板(所有的TextMeshPro包含其中,全部隐藏)。同时在初始的Scene中复制一份完全相同的TextMeshPro。打包:初始场景中即使包含TextMeshPro也不崩溃;游戏场景中仍然崩溃。分析:不是TextMeshPro的影响。

7、只保留Canvas根节点,隐藏所有子节点:崩溃。分析:Canvas根节点做了什么事情?结果发现:

   private void Start()
    {
        //设置游戏帧率为60fps
        Application.targetFrameRate = 60;
        ...
    }

  

8、果断隐藏Application.targetFrameRate的赋值,打包:正常。

 

原因仍然不明,只能避免触发这个闪退问题了

posted @ 2023-04-24 21:24  嗜可乐的王梓  阅读(128)  评论(0)    收藏  举报