最近申请了一个比较低端的测试机,而后惊讶的发现...咱们的app居然这么的卡...虽说app卡很烦,可是我又不用,关我啥事~ 不过做为一个德智体美劳全面发展的新时代程序员,仍是应该“象征性”的查一下问题。卡顿的出现无非是在主线程里边作了耗时操做,影响了主线程对UI的绘制,形成了卡顿的现象。 所以咱们只须要找到主线程中耗时的函数,而后对其进行异步处理便可解决问题。 因此今天我们聊一聊AndroidStudio中检查函数耗时的工具:CPU Profiler。html
固然你们也能够直接参考官方文档:developer.android.google.cn/studio/prof…android
首先来讲,CPU Profiler并非专门用于处理页面卡顿掉帧的,准确说:CPU Profiler是用来查看每一个线程,在某段一段时间内执行了哪些函数,以及在其执行期间每一个函数消耗的 CPU 资源。 专门针对卡顿掉帧问题可使用内置的小工具:systrace。程序员
不整官网那么多“花里胡哨”的介绍,我们直击上应用方式。性能优化
点击启动后,咱们就能够看到以下的内容:网络
不得不吐槽,Profiler用起来是真的卡app
红框圈住的内容,从上到下依次是:异步
咱们点击一下CPU,就能够进一步的查看CPU的使用状况。函数
这个图,表示了当前CPU的使用率,固然这个使用率对应了整个手机,并不能准确的反应咱们本身app的真实状况。接下来我们针对代码,来看一下具体的使用:工具
我在代码里作了什么呢?很简单,一个postdelay,而后里边作一个入参为40的递归菲波那切数列。post
Handler().postDelayed({
fibonacci(40)
}, 20000)
复制代码
接下让我们看一下这个函数的耗时。
咱们须要在咱们认为合适的时机,点一下Record。
由于我这里是delay了20秒,因此我在1七、8秒的时候Record
而后在一个合适的时机,再点一下Stop。
而后咱们就会看到这样的结果:
这样咱们就能够很清晰的看到这段时间内产生的函数调用关系。鼠标移到对应的函数,还能够看到对应的耗时。
所以咱们能够将这段耗时函数移到异步去作,好比这样:
不要在乎这疯狂的Thread使用方式,就是表达一下异步的这么个意思。哈哈~
Handler().postDelayed({
Thread {
fibonacci(40)
}.start()
}, 20000)
复制代码
那么接下来,我们在Record一下:
此时咱们会发现,虽然咱们的CPU使用率在上升,可是对于咱们主线程来讲并无任何耗时操做(也就是第二个红框)。
若是咱们下滑一下选项框,咱们会发现,咱们的耗时操做在这:
当咱们点击它时,咱们就能够看到这个线程的函数调用:
细心的小伙伴可能注意到了:分析函数调用的时候有四个选项卡可供选择。
那它们都分别什么意思呢?这里简单的介绍一下:
Call Chart:
x轴表示函数调用(或调用方)的时间段和时间,并沿y轴显示其被调用者。 对系统 API 的函数调用显示为橙色,对应用自有函数的调用显示为绿色,对第三方 API(包括 Java 语言 API)的函数调用显示为蓝色。
示意图相似于这样:
Flame Chart:
俗称的火焰图。对于火焰图来讲,它就是汇总了Call Chart,并按照调用顺序倒序排列,就像这样:
Top Down、Bottom Up:
这俩种模式相对比较复杂,你们能够参考官方文档的解释配合使用。
这篇文章就是我想聊的内容,就是很简单很简单的工具应用。可是它表明了你踏出性能优化的第一步,踏出第一步将意味着,后面将有一个又一个坑等着你。
来吧,既然选择了远方,便只顾风雨兼程!