异步消息处理线程

  对于普通线程而言,执行完run()方法内的代码后线程就结束了。而异步消息处理线程是指:线程启动后会进入一个无限循环体之中,每循环一次,从其内部的消息队列中取出一个消息,并回调相应的消息处理函数,执行完一个消息后则继续循环。如果消息队列为空,线程会暂停,直到消息队列中有新的消息。
  异步消息处理线程的本质仍然是一个线程,只不过这种线程的执行代码被设置为上述所讲的逻辑而已。一般而言,当同时有以下两种需求时使用异步消息处理线程:

  • 任务需要常驻。比如用于处理用户交互的任务;
  • 任务需要根据外部传递的消息做不同的操作;
      当有这两种需求时,就应该使用一个异步消息处理线程。

实现异步线程的一般思路

  实现异步线程的一般思路如图:

  实现异步线程要解决的问题具体包括:

  • 每个异步线程内部包含一个消息队列(MessageQueue),队列中的消息一般采用排队机制,即先到达的消息会先得到处理;
  • 线程的执行体中使用while(true)进行无限循环,循环体中从消息队列中取出消息,并根据消息的来源,回调相应的消息处理函数;
  • 其他外部线程可以向本线程的消息队列中发送消息,消息队列内部的读/写操作必须加锁,即消息队列不能同时进行读/写操作;

Android中异步线程的实现方法

  Android中异步线程的实现原理如图:

  在线程内部有一个或多个Handler对象,外部程序通过该Handler对象向线程发送异步消息,消息经由Handler传递到MessageQueue对象中。线程内部只能包含一个MessageQueue对象,线程主执行函数中从MessageQueue中读取消息,并回调Handler对象中的回调函数handleMessage()。

-
-
-
-
-
-
-
-
-
-
-
-
-
-
----------------------last line for now----------------------