1 基本概念
异步消息机制
handler是Android给我们的一套消息传递机制,用来更新UI的一套机制,我们可以用来发送消息,也可以用来处理信息。Android不允许直接更新UI。
Android中主线程不会因为Looper.loop()的死循环导致ANR出现。因为ANR并不是耗时操作引起的,而是触摸屏幕等事件没有及时分发,loop()可以及时分发所以不会anr。
MessageQueue,Message,Handler,Looper
1. MQ一直取消息Message,而Msg(what,arg1/2,obj)持有Handler的引用target。
Handler.sendMessage(),其他线程发送handler,handler只在产生线程处理。
2.Looper
Looper.prepare()产生MQ和线程绑定
Looper.loop(),MQ起作用,从而取Msg。
很可惜,MQ,Msg,Looper都有final,所以不好改。
Handler,Looper,Message,Message Queue
线程1 : MQ1 : Looper1 : 多个Handler
每个线程都有自己的Looper
Handler用来发送Message,而Message Queue是用来给Message排队的队列,每个线程最多只有一个,至于Looper是用来取消息。子线程无法更新UI,而主线程无法执行较长时间任务,需要子线程和主线程配合。
1 Handler的使用
Handler是用来处理异步消息的,子线程和主线程用Handler进行通信,子线程可以通过Handler来通知主线程UI更新。
(1)handler.obtainMessage()
(2)handler.sendMessage()
(3)handler.handleMessage()
2 Handler的内存泄漏:
如果声明的Handler是内部类,Activity被销毁,但是Message可能会不被销毁,可能会内存泄漏,可以写作外部类。
正在被使用的消息Message不能再send,需要Message.obtain()重新去取新的消息。
WeakReference弱引用,当一个对象没有强引用指向的时候,调用gc就会清除。