android的异步消息处理机制涉及到的关键点有:异步消息处理线程,MessageQueue,Looper,Handler。
普通线程在执行完run方法后就结束了,但异步消息处理线程启动后会进入“无限循环”中,去消息队列中取消息,如果没有消息则线程挂起,直到有新消息,如果有则取出消息调用消息处理回调函数去处理。
异步消息处理线程的应用场景:1,任务需要常驻,比如处理任务交互的任务。2,需要根据外部传递的消息做不同操作。
Looper的作用有2点:1,执行静态方法prepare为当前线程创建MessageQueue;2,执行静态方法loop,使当前线程处于无限循环中,并读取消息。
要把一个普通线程变成异步消息处理线程,需要在run方法中执行Looper.prepare(),Looper.prepare()不能执行2次,然后执行Looper.loop()。
MessageQueue用来存放Message,先到先处理,如果有时间约束则到时间才处理。
Handler用来向MessageQueue中发送消息,程序员需要重写用来处理消息的handleMessage()方法。创建Handler的线程必须已经有消息队列,也就是说已经执行过Looper.prepare(),否则会报错“Can't create handler inside
thread that has not called Looper.prepare()”。Handler的创建可以在Looper.loop()之前,也可以在之后。一个线程可以有多个Handler对象,在处理消息时不同的Message对应不同Handler。