Android的消息机制主要是指Handler的运行机制,Handler的运行需要MessageQueue,Looper的支持;Handler的主要作用就是讲一个任务切换到某个指定的线程中去执行,主要去执行一些UI操作;
1、ThreadLocal的工作原理;
Threadlocal主要作用是可以根据不同的线程互不干扰的存储数据和提供数据,其内部封装了ThreadlocalMap类用于数据存储和提供,分别使用get和set方法,存取数据时都会去调用Thread.currentThread();方法获取当前线程,在不同的线程中访问同一个Threadlocal的get()和set()方法,它们对Threadlocal所做的读写操作仅限于各自线程的内部。
2、消息队列的工作原理;
MessageQueue:消息队列,用于存放Handler发出的消息,其存放的方式使用单链表数据结构,单链表在插入和删除上比较有优势,插入和读取分别对应了enqueueMessage()和next方法,前者是往消息队列里插入一条数据,后者则是取出消息后并且在消息队列中移除,next是一个无限循环的方法,没有消息时阻塞等待,当有新消息时,next会返回这条消息并将其从队列中移除。
3、Looper的工作原理;
Looper:轮询器,实际上Looper就是一个无限循环的消息轮询器,跟MessagQueue结合,不断的从MessageQueue中查看是否有新消息,去调用MessageQueue的next方法,因为next就是一个无限循环的方法,因此Looper的loop方法也是跟next一样,无消息时等待,有消息时获取,当获取到消息时会交给Handler去处理,Handler的dispatchMessage方法被调用;
4、Handler的工作原理;
Handler的工作主要包括发送消息和接收消息,消息的发送可以通过post或者send等一系列的方法,其中post一系列的方法也是通过send发出的。Handler发送消息其实就是把消息插入到MessageQueue中,MessageQueue通过next方法把消息传递给Looper,Looper收到消息处理后交由Handler处理,Handler接收到消息,dispatchMessage被调用,处理过程:先检查Message的callback是否为null,不为null就通过handlerCallback来处理消息,其次检查mCallback是否为null,不为null则调用handlerMessage方法完成回调。
举报/反馈