现象
ipad mini3 在app切入后台,重新切回app,页面重新渲染(闪屏)
排查问题
- 对比资源较少的页面,偶发闪屏(概率极小),资源较大的页面频繁闪频(概率极大)。大致定位原因是webview本身有所限制。
- 对比安卓和ios,发现安卓没有问题,ios才有。大致定位原因是ios的webview的问题
- 开启safari检查器,在控制台的时间线(timeline)上看到,切换至后台重新打开app后频繁触发full gc。
原因
webkit的绘制机制
webkit在绘制页面时会将结构分为各种层,当层足够大时就会变成很大的平铺层。这样一来webkit在每次页面结构发生变化时不需要都渲染整个页面而是渲染对应层了,这对渲染速度来说相当的重要。webkit会给各种层分配一定大小的“后备存储器”在内存里缓存起来,这就是绘制层的上下文,通过这个上下文就可以很容易的实现各种效果(动画,3D变换等)
ios内存分配策略
iOS上当内存不足时,根据uiwebview和wkwebview的不同,它自身有不同的回收策略。
- 如果是uiwebview的app,内存不足时整个app会崩溃,即闪退。
- 如果是wkwebview的app,内存不足时,单个wkwebview会崩溃。也就是所谓的应用还在,而页面白屏。
解决方案
优化资源大小
参考文档
App平台iOS设备上因内存不足导致白屏、闪退的问题解决方案
Minor GC、Major GC和Full GC之间的区别
ios transition translate 闪屏问题总结