天天看点

View优化

前面写了个view画圆弧,为了让他和底层图片效果融合,采用先把圆弧画到和图片一样大小的画布上,然后用canvas的变换位图方法映射过去。

View优化

可是通过traceview分析到,viewrootimpl.ondraw函数平均时间为72.808那是远大于16,卡是必然的,我们发现里面的自定义view的ondraw函数时间就达24ms之多,主要是在createbitmap和gc上耗时较大。

跟踪imageview的fill_center模式,发现他并没有耗时这么长,原来它直接用matrix对canvas进行变换,省去了上述两个最耗时的操作。

View优化

这里的自定义view ondraw函数时间不到1ms减小了很多,目前rootview时间为48ms,还是卡,有待进一步优化。

后续:

整了一下午,写了个测试程序,使用的属性动画,底层可以看到是调用opengl的交换缓冲区实现,ondraw控制在14毫秒左右;

可我自己的程序删减得代码都一样了,底层始终在调imageview的draw bitmap,它的时间就在30秒以上,那个伤心呀。

后面准备把测试程序的activity弄过来一步一步加看到底怎么回事,弄过来才发现,好好的代码时间也在30毫秒以上了。

看androidmanifest.xml发现一个是sdk

11一个是14,修改过来,现在的时间在21毫秒了,效果还是有提过的,离16毫秒越来越近了。