一文读懂直播卡顿优化那些事儿 直播卡顿怎么解决( 五 )


profiler
Androidstudio 自带工具,比较方便,但是数据准确度不高
sf / gfxinfo
主要用于脚本和工具
4.2 常用的思路

这里主要针对 UI 卡顿和 UI/流相互影响打来的卡顿 。
对于 UI 卡顿来说,我们手握卡顿优化的 8 板大斧子,所向披靡:
  1. 下线代码;
  2. 减少执行次数;
  3. 异步;
  4. 打散;
  5. 预热;
  6. 复用;
  7. 方案优化;
  8. 硬件加速;
总体思路就是「能不干就不干、能少干就少干、能早点干就早点儿干、能晚点儿干就晚点儿干、能让别人干就让别人干、能干完一次当 10 次就只干一次,实在不行,再考虑自己大干一场」 。
这里例举出一些常见的优化思路,注意这一定也不可能是全部,如果有其他好的优化思路,我们可以一起交流 。
4.3 一些做过的事儿4.3.1 解决 UI 卡顿引起的流卡顿直播对于 SurfaceView 的切换是一个长期的专项,分为多期逐步将 SurfaceView 在直播全量落地,场景覆盖秀场直播、聊天室、游戏直播、电商直播、媒体直播等,业务上对于渗透率和停留时长有比较显著的收益,同时功耗的收益也很可观 。
这里是一个权衡的问题,SurfaceView 的兼容性问题 pk 带来的收益是否能打平,一般来说,越是复杂的业务场景,收益约大 。
4.3.2 解决 message 调度FWatchDog 是基于对 MessageQueue 的调度策略和同步屏障原理,以均帧耗时为阈值判定丢帧后主动在 MessageQueue 中插入同步屏障,保证渲染异步 message 和 doframe 的优先执行,达到一种渲染插帧的效果,同时具备 ANR 自动恢复同步屏障的能力,保障打散的有效 。
所以 FWatchDog 和打散是好的搭档,能产生 1+1 大于 2 的效果 。
4.3.3 减少执行次数一个典型的应用场景就是滑动场景的 GC 抑制,能够显著提高用户上下滑的使用体验 。这个场景相信每个业务都会存在,特别是存在大量遍历的逻辑,优化效果明显 。
4.3.4 代码下线一些老的框架、无用的逻辑以及存在性不高的代码都可以下线,这里基本业务强相关,就不举具体的例子了 。
4.3.5 解决耗时函数(打散/异步)首先是打散,直播做了很多 task 的拆分以及打散,第一可以减轻当前渲染帧的耗时压力,第二可以和 FWatchDog 结合达到插帧的效果 。这里其实还可以控制 task 的执行优先级,包括队列的插队等,总之 MessageQueue 的合理调度是很有必要的 。
异步的使用也相对比较多,一个埋点日志的框架,以及一些 inflate 的加载等,都可以使用异步来解决卡顿问题 。
4.3.6 预热直播提供了一个预热框架,可以让直播内部的一次性成本逻辑得到在宿主侧执行的机会,同时提供完备的队列优先级管理、同步异步管理和 task 生命周期管理,降低直播内部首次加载的卡顿问题 。
4.3.7 硬件加速拉高硬件的运行性能,比如 CPU 频率、GPU 频率、线程绑大核以及网络相关的调优,从底层提高 App 的运行体验 。
5. 加入我们直播客户端技术团队是一个集体验优化、平台建设、跨端、端智能、稳定性为一体的综合性团队,团队氛围 nice,技术成长快,有充足的自由度发挥自己的特长,为亿级 DAU 产品保驾护航,也面临更加丰富多样的挑战,每一行代码都会让数亿的用户体验变得更好!现诚邀各位英才加入,对这些方向感兴趣的同学都可以来聊一聊,内推链接


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: