Handler

 Handler消息机制原理:

1.在主线程创建mHandler,在构造方法中传入主线程的looper(主线程不需要手动传递,默认会传,其他线程需要手动传递)并重写handleMessage方法。子线程通过mHandler的sendMessageAtTime发送消息,在sendMessageAtTime方法中获取主线程的消息队列,并将当前mHandler赋值给message中的target属性并通过消息队列的enqueueMessage方法将message插入到消息队列中。

2.looper通过for死循环不断的访问消息队列中的next方法获取message,如果message不为空会调用message的target属性的dispatchMessage方法来分发消息,dispatchMessage最终会调用handleMessage方法,由于message中的target中的handler就是主线程的mHandler,所以会调用主线程中的handleMessage,所以此时可以在主线程的handleMessage中更新UI了,消息也已经由子线程传递到了主线程。

例子:

谈谈Android中的HandlerThread_Mr Lee_的博客-CSDN博客_android handlerthread

注意:

1.主线程会默认创建looper所以不需要传,其他线程需要手动创建looper并把它传入当前线程

2.创建looper的时候在looper的构造方法中会创建了一个消息队列

Handler发送消息

1.sendEmptyMessageAtTime(int what, long uptimeMillis)//发送延时消息。第二个参数的意思uptimeMillis秒之后发送消息,以系统开机时间为标准。(如果系统开机时间到此时正好是uptimeMillis秒,那么就会立即执行并发送消息)。

2.sendMessageAtTime(Message msg, long uptimeMillis)//发送延时消息。第二个参数的意思uptimeMillis秒之后发送消息,以系统开机时间为标准。(如果系统开机时间到此时正好是uptimeMillis秒,那么就会立即执行并发送消息)。

3.sendMessageDelayed(Message msg, long delayMillis)//发送延时消息。第二个参数的意思delayMillis秒之后发送消息,以系统当前时间为标准。(系统当前时间delayMillis秒之后发送消息)。

4.sendEmptyMessageDelayed(int what, long delayMillis) //发送延时消息。第二个参数的意思delayMillis秒之后发送消息,以系统当前时间为标准。(系统当前时间delayMillis秒之后发送消息)。

HandlerThread:
A线程要想向B线程通信,B线程必须要在handler的构造方法中传入B线程的looper并且重写handleMessage方法。
以前:需要在B线程中通过Looper.prepare()和Looper.loop()手动创建looper
现在:通过HandlerThread.getLooper()就可以获取到looper了,不需要手动创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值