第一步:
既然我们要解决UI卡顿问题,那么第一步就是写一个很卡的APP.
我自己是写了一个DEMO,listview去展示大图片,快速滑动的时候会很卡。

第二步:
打开DDMS
然后选中调试APP进程,然后点击“Start Method profilling”

第三步:
操作APP,复现卡顿过程
第四步:
点击“Stop Method profilling”,与第二步是同一个位置
至此trace文件已经生成,并由IDE自动打开
第五步:
最后来分析生成的trace文件.
重点来了:点击Excl Cpu Time %, 重新排序,这个排序不包含子函数占用的CPU时间,所以可以立刻找到哪个函数消耗CPU资源最多。

可以看到最消耗CPU的函数是BitmapFactory.nativeDecodeStream()
很显然这个函数是framework层的API,我们接着往上找。
选中这个函数,然后点击Parent,再点击Parent,直到找到我们App的调用处。

最终我们找到那个耗时函数,也就是造成卡顿的症结!!!
第六步:
最终解决:用子线程异步加载 or 用开源库来载入!!
欢迎大家一起交流 ^^
网友评论