换个角度理解Android中异步通信问题:
进程代码段
进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)
进程打开的文件描述符
信号的处理器
进程的当前目录和进程用户ID与进程组ID。
线程ID
寄存器组的值
线程的栈(栈是保证线程独立运行所必须的)
错误返回码
线程的信号屏蔽码
线程的优先级
线程间要实现数据的通讯最方便的方式就是利用进程的公有数据。
每个线程一个Looper实例,同时一个Looper只有一个MessageQueue。
loop()方法,不断从MessageQueue中去取消息,交给消息的target属性的dispatchMessage去处理。
Handler在初始化的时候就会关联上Looper的MessageQueue对象。
在另外一个线程中,因为可以共享使用Handler对象,就可以通过Handler发送消息给主线程
Handler在主线程创建时会与主线程绑定,同时关联主线程的Looper以及MessageQueue。在子线程时可通过引用该Handler对象发送Message请求将其加入MessageQueue。而主线程中looper会轮询MessageQueue,当有新的Message进入时,会交由handler的handleMessage函数在主线程进行处理。
核心的原理就是利用了两个线程都使用的公有数据MessageQueue进行了线程间通信。
是不是很简单~~