如何优化自定义View

view的绘制流程:onMeasure---onLayout---onDraw

第一步:onMeasure:测量view大小。从顶层父view到子view递归调用measure,measure方法回调onMeasure
第二步:onLayout:确定view位置,进行页面布局。从顶层父view向子view递归调用view.layout方法的过程,父view根据上一次measure子view获得的布局大小和布局参数,把view放置在合适的位置。
第三步:onDraw:绘制视图。viewRoot创建一个canvas,然后调用onDraw方法。
共六个步骤:
1.绘制视图背景
2.保存画布图层
3.绘制view的内容
4.绘制view子视图(如果没有,就不画)
5.还原图层
6.绘制滚动条

1.减少不必要的代码:对于频繁调用的方法,需要尽量减少不必要的代码。

2.不在 onDraw 中做内存分配的事:先从 onDraw 开始,需要特别注意不应该在这里做内存分配的事情,因为它会导致 GC,从而导致卡顿。在初始化或者动画间隙期间做分配内存的动作。不要在动画正在执行的时候做内存分配的事情。

3.降低view的刷新频率,尽可能减少不必要的调用invalidate()方法。或是调用带四种参数不同类型的invalidate(),而不是调用无参的方法。无参变量需要刷新整个view,而带参数的方法只需刷新指定部分的view。

4.使用硬件加速,GPU硬件加速可以带来性能增加。(View的布局类型设置为 LAYER_TYPE_HARDWARE)

5.状态保存与恢复,如果因内存不足,Activity置于后台被杀重启时,View应尽可能保存自己属性,可以重写onSaveInstanceState和onRestoreInstanceState方法,状态保存。

参考文章
https://blog.csdn.net/github_37130188/article/details/89111512

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、何为View## 1、View的简介 View英文有视图的意思,顾名思义就是我们所能看到的。因此,目前我们所能...
    alsheng阅读 4,198评论 0 3
  • 1.List<T>和List<?>的区别? List<T>是泛型,List<?>是泛型类型通配符,相当于List<...
    小酷哥阅读 4,438评论 0 2
  • [toc] Android面试题 Android面试题除了Android基础之外,更多的问的是一些源码级别的、原理...
    间歇性丶神经病患者阅读 4,247评论 0 1
  • <一>降低刷新频率 为了提高view的运行速度,减少来自于频繁调用的程序的不必要的代码。从onDraw()方法开始...
    天平GG阅读 5,102评论 0 5
  • 我今天和妈妈去接姐姐了,我妈妈给我买了冰淇淋,我姐姐想买火烧,我跟姐姐和爸爸回去的时候,我从楼下看到了张艳彤和大刘...
    韩策阅读 1,711评论 0 0

友情链接更多精彩内容