共计 1477 个字符,预计需要花费 4 分钟才能阅读完成。
原文链接 玩转安卓运行速度优化
早在许多年以前写过一篇安卓性能优化文章,时过境迁,很多事件都有了变动,所以再专门针对程序运行速度和渲染的优化,这两方面十分间接的影响应用程序的操作晦涩度,也能够称作晦涩度优化办法,但更为业余的形式就是 CPU 优化,因为就是要进步代码的运行速度。
须要优化的中央
总的来说,就是利用程序运行要快,大体能够分为三块:
利用启动要快
从用户点击了桌面的图标到用户能残缺见到页面,这个过程要快。其实也不是快,而是没有能从用户感知失去的卡,或者黑屏或者白屏。
渲染要快
也就是说 View 的渲染要快,无显著的 Jank,也即卡顿和丢帧。
操作要晦涩
次要是针对动画,滑动,转场的时候要晦涩,也并不一定就是要真的快,而是说从用户感知的角度来看没有显著的卡顿和丢帧。
业务逻辑要快
也就是说要疾速的实现你的业务逻辑,这个其实没有方法一概而论,取决 于具体的业务逻辑和理论的应用场景,比方网络不好的时候必定啥都慢啊。
咱们常说的性能优化,个别重点是在启动,渲染和操作晦涩度下面下功夫,因为这些货色的优化办法更为通用一些,用户感知也更显著一些。也将是咱们前面要探讨的重点内容。而至于像业务逻辑,每个具体的应用程序都不一样,所以没有方法一概而论,而惯例的一些小的优化技巧也不会起决定性应用。比如说 I / O 优化办法,缓存的应用,以及像内存优化等等,的确能帮忙你的业务逻辑。但如果业务逻辑就是特地简单,或者代码写的很差劲,明明一个网络申请就能搞定的事儿,非要弄四五个申请,那你再怎么优化细节,比方把每个申请速度都优化到最好,I/ O 优化到最好,也是没有多大晋升的。
运行速度分析方法
后面提到的启动优化,渲染优化和操作晦涩度优化,其实都是针对 CPU 的优化,也即代码执行的优化,只不过重点剖析那三个场景而已。
具体的分析方法次要就有两方面,一是用 Profiler 抓取 trace,另外就是能够在代码中退出打点数据。
能够后行用代码代码打点的形式进行粗略的量化,比如说看 onCreate 执行了多久,看 onResume 执行了多久,这有两方面益处,一是能够粗略的定位问题,二是不便监控,比方你优化前与优化后的比照,能晓得到底是否真的有晋升。
精细化剖析的办法就是抓 trace,而后看具体哪里耗时了,具体应用办法可参前面的列举的资源都相当具体,就不反复了。
须要留神的就是剖析 trace 时除了用 Profiler 以外,还能够用 Perfetto,这个性能更为弱小。
优化办法
具体的优化办法,就没有银弹了,做的事件特地多,代码特地简单,逻辑特地多特地简单,优化起来难度天然很大。
外围的准则就是少,少即是多,少做事,特地是主线程,能 lazy 则 lazy,能异步则异步,波及 I / O 时,要多用 BufferedStream,巧用缓存,buffer 尽可能要是 8k 大小(8192),有重 I / O 的场景要用 nio 库。View tree 要尽可能精简和扁平,某些非凡条件才会显示的页面就用 ViewStub 先占着等等。
参考资料
- Android 性能优化总结
- Inspect CPU activity with CPU Profiler
- Overview of system tracing
- 手把手教你应用 Systrace(一)
- Understanding Systrace
- Overview of measuring app performance
- Benchmark your app
- 性能剖析工具 Systrace 的应用详解
- Android Systrace 应用办法
- Android 性能优化之 CPU Profiler
- CPU Profiler 使用指南