最近发现我们直播应用在进入直播间时, 能感受到明显的卡顿. 本篇博文记录优化该问题的过程.
优化前
systrace 作为分析卡顿问题的利器, 本篇记录的优化方法, 正是借助它实现的, 优化前的 systrace 如下图.
优化前
透过 systrace 标 1 的地方可以看到启动直播间的观看页面耗时近乎 1s 钟, 难怪用户会感受到卡顿. 标 2 跟标 3 的地方都是耗时的大户, 放大 systrace 文件分别进行排查.
帧动画资源过大
标 2 放大图
透过放大后的标 2 处, 发现一个 combo_anim.xml 资源文件竟然耗时 60ms, 打开该文件如下:
combo_anim
这个帧动画是为了播放直播间小礼物而存在的, 由于是通过数十张图片组合而成的, 难怪加载耗时那么久, 在接着排查, 发现了好几处类似的资源, 这些都是需要优化的地方. 礼物相关的资源文件在刚进入直播间是没有必要加载的, 因此这里通过 ViewStub 控件让礼物相关的布局实现惰性加载.
加载了不必要的 webview
在接着看标 3 的地方
这里 WebViewChromium 初始化占据了大部分时间, WebView 是为了加载游戏直播房间内的网页游戏而生的, 进入直播间加载也不需要, 可以通过判断是否是游戏房间在决定是否初始化 webview 来进行优化.
按需加载语音业务模块
再继续看有一块 audiolive 相关的 view 也在进入房间时被初始化了.
通过判断是否是语言房间来决定是否加载该块 view.
优化后效果
最后看下优化后的效果, 从 900ms 优化到了 300ms.
优化后
在优化的过程中, 透过 systrace 文件还是比较容易发现卡顿的症结在哪, 但在修改的过程中, 要注意可能导致的风险. 任何修改旧业务的代码都可能会导致新的问题, 如果引起了新的问题, 那优化工作就得不偿失了.
更多资料分享欢迎 Android 工程师朋友们加入安卓开发技术进阶互助: 856328774 免费提供安卓开发架构的资料 (包括 Fultter, 高级 UI, 性能优化, 架构师课程, NDK,Kotlin, 混合式开发(ReactNative+Weex) 和一线互联网公司关于 Android 面试的题目汇总.
来源: http://www.jianshu.com/p/f9661fc5803a