美文网首页Android知识
自定义View你更需要注意的事情

自定义View你更需要注意的事情

作者: 林锐波 | 来源:发表于2017-06-08 17:29 被阅读163次

自定义控件是android开发中最常见的技术,对于面试来说经常会被问到,然而面试者们的回答也几乎是千变一律,自定义View的原理,原理,原理.
当然不可否认自定义View原理是Android开发者必须了解的基础.但是时间开发中更需要了解的是对该View的性能优化.

OOM内存优化问题.

  1. 可以在onDraw中创建对象吗?
    不建议你在draw或者layout的过程中去实例化对象!
  • 我们应该在哪里创建对象?
    在自定义控件的构造方法内创建.
  • new是需要分配内存空间的,如果在一个频繁重复的过程中去大量地new对象内存爆不爆我不知道,但是浪费内存那是肯定的
  1. 在onDraw中调用getCompoundDrawables会怎样?

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

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

线程安全问题.

  1. 小Demo:实现一个圆让它的半径从小到大地不断变化,那怎么实现好呢 ?
    提醒了解到一个知识点就是圆圈会在 onDraw()方法中不断的重新绘制.

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

  1. invalidate()与postInvalidate()有什么区别?
    android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate.
    invalidate()在UI线程自身中使用;
    postInvalidate()而在哪里都可以调用.

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

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

演讲建议:

  1. 对于自定义来说要注意到的问题是优化,优化,优化,其次才是效果.
  2. 可以在讲这方面内容时加入一些基础知识,这样会更加通俗易懂如onDraw中 不断的new 对象后果严重
  3. 讲的时候可以与实际项目关联,这样会更加生动.

相关文章

  • 自定义View你更需要注意的事情

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

  • iOS Swift 哀悼日灰化APP界面

    实现原理:用添加了半透明灰色滤镜的View,盖在想要置灰的界面上。 自定义View 添加View到界面。需要注意,...

  • 2018-05-14

    自定义View 自定义一个View需要做的事情: 1.继承View 2.重写onDraw(Canvas c)方法 ...

  • Android自定义View之直接继承View

    对于自定义View直接继承View这种方式,主要是重写onDraw()方法,来实现不规则的图形效果。 需要注意处理...

  • 2019日更挑战(六),Android-简单聊聊自定义view

    瞎扯 聊完View的绘制,聊聊View的自定义.其实自定义view也不是什么特别难的事情.难度主要取决于.思路.算...

  • Android View(转)

    自定义View的原理自定义View基础 - 最易懂的自定义View原理系列自定义View Measure过程 - ...

  • Android之自定义View

    一.概述 通过本篇文章的学习,你将学会:1.自定义View的流程2.自定义View分类 二.自定义View的流程 ...

  • 自定义View5---完整的自定义View

    移步自定义View系列 1.自定义view的分类自定义单一view(不含子view)继承view继承特定view如...

  • 自定义View系列

    自定义View1---知识储备自定义View2---View Measure过程自定义View3---View L...

  • 自定义view

    Android自定义View 为什么要自定义View自定义View的基本方法 自定义View的最基本的三个方法分别...

网友评论

    本文标题:自定义View你更需要注意的事情

    本文链接:https://www.haomeiwen.com/subject/shstqxtx.html