对于多线程的Android应用程序来说,有两类线程:一类是主线程,即UI线程;另一类是工作线程,即主线程或工作线程创建的线程。Android的线程间消息处理机制主要用来处理主线程与工作线程间的通信,如图5-8所示。
图5-8 线程间通信的示例
Android应用程序通过消息来驱动,即在应用程序的主线程中有一个消息循环,负责处理消息队列中的消息。
线程之间和进程之间不能直接传递消息,必须通过对消息队列和消息循环的操作完成。Android消息循环是针对线程的,每个线程都可以有自己的消息队列和消息循环。Android提供了Handler类和Looper类来访问消息队列。
每个Activity运行于主线程中,Android系统在启动时会为Activity创建一个消息队列和消息循环。
图5-9 Activity与Looper,Handler的关系
Handler的作用是把消息加入特定的(Looper)消息队列中,并分发和处理该消息队列中的消息。构造Handler时可以指定一个Looper对象,如果不指定,则利用当前线程的Looper创建。Activity和Looper,Handler之间的关系如图5-9所示。
一个Activity中可以创建多个工作线程或者其他组件,如果这些线程或者组件把它们的消息放入Activity的主线程消息队列,那么该消息就会在主线程中处理。因为主线程一般负责界面的更新操作,并且Android系统中的界面控件不是线程安全的,所以这种方式可以很好地实现Android界面的更新。在Android系统中,这种方式有着广泛的运用。(www.xing528.com)
那么,另外一个线程怎样把消息放入主线程的消息队列呢?答案是通过Handler对象,只要Handler对象以主线程的Looper创建,那么调用Handler的send Message等接口,将会把消息放入主线程的消息队列,并且将会在Handler主线程中调用该Handler的handle Message接口来处理消息。
下面是一个多任务的简单示例,代码如下:
程序的运行效果如图5-10所示。
Android有两种方式实现多线程操作UI:
图5-10 多任务示例的运行效果
(1)创建线程Thread,用Handler负责线程间的通信和消息;
(2)Async Task异步多任务。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。