1.Handler机制的原理:
1.发送消息:sendMessage():通过Handler将消息发送给消息队列
2.给Message贴上handler的标签:在发送消息的时候,为handler发送的message贴上当前handler的标签
3、开启HandlerThread线程,执行run方法。
4、在HandlerThread类的run方法中开启轮询器进行轮询:调用Looper.loop()方法进行轮询消息队列的消息
5、在消息队列MessageQueue中enqueueMessage(Message msg, long when)方法里,对消息进行入列,即依据传入的时间进行消息入列(排队)
6、轮询消息:与此同时,Looper在不断的轮询消息队列
7、在Looper.loop()方法中,获取到MessageQueue对象后,从中取出消息(Message msg = queue.next())
8、分发消息:从消息队列中取出消息后,调用msg.target.dispatchMessage(msg);进行分发消息
9、将处理好的消息分发给指定的handler处理,即调用了handler的dispatchMessage(msg)方法进行分发消息。
10、在创建handler时,复写的handleMessage方法中进行消息的处理
11、回收消息:在消息使用完毕后,在Looper.loop()方法中调用msg.recycle(),将消息进行回收,即将消息的所有字段恢复为初始状态
2.控件自动换行:
将自定义的LinearLayout 也继承自ViewGroup 并且重写抽象类ViewGrouop的几个方法:onMeasure(),onLayout(),dispathDraw() 三个方法的意思分别是:第一个onMeasure()是用来计算控件以及子控件所占用的区域,第二个onLayout()是控制子控件的换行,第三个可写可不写,主要是用来绘制控件的边框。
根据子控件的高度与宽度,来动态加载父控件的高度与宽度
在onLayout()方法中,通过子控件的layout方法来布局每个子控件
在onMeasure()方法中计算控件及子控件所占的区域
3.Java中抽象类和接口的区别
1,抽象类里可以有构造方法,而接口内不能有构造方法。
2,抽象类中可以有普通成员变量,而接口中不能有普通成员变量。
3,抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。
4,抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5,抽象类中可以包含静态方法,接口内不能包含静态方法。
6,抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static类型,并且默认为public static类型。
7,一个类可以实现多个接口,但只能继承一个抽象类。
再补充点两者在应用上的区别:
接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用