Android性能优化及工具 | 青训营笔记

122 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第6天。

以下是第七堂课的笔记和总结

初始性能优化及工具

为什么性能做性能优化

硬件性能提升速度变缓

软件的性能优化仍可持续带来提升

性能优化是什么

流畅性优化

界面刷新如:60帧,16ms刷新一次(使用VSync信号)

卡顿来源:

  • delay(输入延迟),代码导致
  • 输入后代码处理逻辑过长导致丢帧
  • 页面UI处理等耗时过长,导致丢帧

解决:将耗时操作放到其他线程

资源优化

端侧资源:功耗,内存、存储,CPU,电量,网络,音量等。

服务则资源:CDN带宽,API流量

稳定性优化

Crash(崩溃)

Timeout(超时):UI Jank(卡顿掉帧)、ANR(应用无响应)

系统级优化

移动操作系统和硬件厂商的性能优化

最佳性能工具选型(略)

  • 布局问题:

    Layertool(抖音自研)

  • 性能归因:

    CPU Profiler

    TraceView

    Systrace

  • btrace(aka rhea)- 进阶

  • 功耗

    battery Historian

如何做性能优化

  • 现状分析

    找到耗时成因

    • CPU Time

      循环、反射,序列化/反序列化,类解析

    • IO Wait

      IO操作,等待IO返回结果

    • IPC

      Binder调用耗时

    • Lock Wait

      主线程是等锁状态,等待其他线程或者自己超时唤醒

    • CPU Schedule

      主线程是可执行状态,但是获取不到CPU时间片

    根据运行所在线程环境采用不同的策略

    渲染分析

  • 优化策略

    • UI-构建解决方案

      耗时成因:xml IO、class反射、创建view、Asset资源大锁

      官方解决方案:AsyncLayoutInflater(随时随地预加载)

    • 渲染耗时优化

      移除不必要布局,修改不合理布局,写高效合理的布局,移除默认Windows背景,绘制层级优化

    • 异步渲染

      • SurfaceView
      • Jetpack Compose
      • Litho

总结

这堂课主要讲解了在移动端开发时,经常需要考虑到性能优化。本节课讲解了多个可以优化的方面,以及不同的优化方案。接着针对不同场景的性能优化,介绍了许多高效的性能工具。最后,对于性能优化的步骤,讲解了几个性能优化案例。