Android之Handler

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就会清除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值