Android消息机制

Android的消息机制也就是Handler的工作机制以及Handler所附带的MessageQueue和Looper的工作过程。

1.首先handler在创建的时候会采用当前线程的Looper来构建内部的消息循环系统,如果当前线程没有Looper,那么就会报错。

2.handler创建完毕后,这个时候内部的Looper以及MessageQueue就可以和Handler一起协同工作了。

MessageQueue主要包含俩个操作,插入和读取,这俩个操作分别对应的方法名是enqueueMessage和next ,而读取操作本身会伴随着删除操作,其中next的作用是从消息队列取出一条消息并将其从消息队列中移除,而enqueueMessage的作用是往消息队列是往消息队列中插入一条消息。

我们知道MessageQueue是不能处理消息的,所以得靠Looper处理。

那么Looper是怎么处理消息的呢?

那就是调用Looper的loop方法,loop方法会调用MessaQueue的next方法来获取新消息。如果next方法返回了新消息,则Looper就会处理这条消息,当没有消息时,next方法会一直阻塞在那里。

当然Looper也是可以退出的,Looper提供了quit和quitSafely来退出一个Looper;

二者的区别:

quit: 会直接退出Looper

quitSafely: 设定一个退出标记,然后把消息队列中已有消息处理完毕后才安全退出。

Handler的工作原理主要包含消息的发送和接收,Handler发送消息的过程仅仅是向消息队列中插入一条消息,MessageQueue的next方法就会返回这条消息给Looper,Looper收到消息后就开始处理了,最终消息由Looper交由Handler处理,既Handler的dispatchMessage方法会被调用,这时消息则由handler处理了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容