Android clipPath导致卡顿

最近在做音乐的播放界面,中间是一个旋转的圆形封面图。
第一个方案是在onDraw中先用Canvas.clipPath裁切出圆形然后drawBitmap,旋转采用属性动画。调试时发现持续运行大概三分钟后会开始出现掉帧,logcat开始显示跳帧。所以打开profiler查看运行状况。(调试用的是骁龙801的机子所以性能比较渣)

运行时CPU消耗:

onDraw中每次都clipPath

??机子渣也不至于吧为了一个界面CPU消耗近半?
注意到下面Threads处,RenderThread在一直运行中。追踪一下方法先。


找出大BOSS

原来是你,clipPath,占了近半的时间。
由此可知clipPath中需要进行大量的计算,不适合在高频调用onDraw的情况下使用不然会导致线程卡顿。

第二个方案是使用BitmapShader配合drawCircle来实现圆形绘制,性能如下

微信截图_20181016232606.png

RenderThread和UI线程的工作量明显减少,CPU平均占用13%左右(这个是真的因为手机太旧了四年前的骁龙801),换成小米8调试CPU占用1%。。突然有点庆幸自己用渣机调试不然还可能发现不了这个问题。

第三个方案是用RoundedBitmapDrawable直接生成圆形图,然后直接drawBitmap。调试后发现性能和第二方案基本持平。

从实现过程看第二方案和第三方案的难度基本一样,都需要先把图片压缩、裁切成正方形。(不过在从mp3中提取封面图时发现提取到的图都已经是正方形的了)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,314评论 25 708
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,949评论 2 59
  • 第二章 情感引导的重要性:奠定父母与孩子一生的亲密关系 1 为什么要进行情感引导? 情感引导,不仅会帮助你的孩子,...
    杨小羊story阅读 479评论 0 0
  • 5月31日微语简报,星期三,生活喜乐! 一份微语报,众览天下事! 微博:宁波道叔 1、趁火打劫 高盛三折买入委内瑞...
    宁波道叔阅读 654评论 1 0
  • 雨过放晴的大地变得干净,挂在树叶和小草上的雨珠被雨后阳光折射出一道道五彩虹光。呆坐在石凳上,闻着那雨后阳光的...
    枫林醉晚阅读 343评论 0 11