android 自定义view 注意点,自定义View你更需要注意的事情

自定义控件是android开发中最常见的技术,对于面试来说经常会被问到,然而面试者们的回答也几乎是千变一律,自定义View的原理,原理,原理.

当然不可否认自定义View原理是Android开发者必须了解的基础.但是时间开发中更需要了解的是对该View的性能优化.

OOM内存优化问题.

可以在onDraw中创建对象吗?

不建议你在draw或者layout的过程中去实例化对象!

我们应该在哪里创建对象?

在自定义控件的构造方法内创建.

new是需要分配内存空间的,如果在一个频繁重复的过程中去大量地new对象内存爆不爆我不知道,但是浪费内存那是肯定的

在onDraw中调用getCompoundDrawables会怎样?

此方法要不创建新的Drawable数组,要不就clone() mDrawables数组。无论是克隆还是新建都将创建新的数组,这里虽然Java使用浅拷贝来拷贝数组,但是数组本身会重新创建(只是数组成员引用被拷贝的数组成员)

要在onDraw中调用getCompoundDrawables,毕竟在运行过程中修改drawable的需求不多,如果真的要处理的话可以在,构造方法中init.

线程安全问题.

小Demo:实现一个圆让它的半径从小到大地不断变化,那怎么实现好呢 ?

提醒了解到一个知识点就是圆圈会在 onDraw()方法中不断的重新绘制.

google已经帮我封装了 postInvalidate()方法,使用到了Thread()和postInvalidate()方法.

invalidate()与postInvalidate()有什么区别?

android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate.

invalidate()在UI线程自身中使用;

postInvalidate()而在哪里都可以调用.

那么使用invalidate()是否也可以实现刚刚那个效果?

因为刚刚说了,invalidate()在UI线程自身中使用,那么UI线程我们是不是可以加多个 handler对象来解决这个问题.

好,那我们是不是可以猜想下,其实postInvalidate()源码里应该也就是封装了一个handler().

演讲建议:

对于自定义来说要注意到的问题是优化,优化,优化,其次才是效果.

可以在讲这方面内容时加入一些基础知识,这样会更加通俗易懂如onDraw中 不断的new 对象后果严重

讲的时候可以与实际项目关联,这样会更加生动.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值