Android后台线程和UI线程通讯实例
本节向你展示如何在任务中发送数据给UI线程里的对象,这个特性允许你在后台线程工作,完了在UI线程展示结果。
在UI线程定义一个Handler
Handler是Android系统线程管理框架里的一部分。一个Handler对象接收消息,并且运行代码来处理消息。正常情况下,你为新线程创建Handler,但你也可以为已有的线程创建一个Handler.当你连接Handler到UI线程时,处理消息的代码会在UI线程上运行.
在创建线程池的类的构造器里实例化Handler对象,保存在全局变量里。用Handler(Looper)方法实例化,连接到UI线程,构造方法使用Looper对象,也是Android系统线程管理框架里的一部分.Looper类有一个静态方法getMainLooper()可以获取UI线程的Looper对象。如:
privatePhotoManager(){ ... //DefinesaHandlerobjectthat'sattachedtotheUIthread mHandler=newHandler(Looper.getMainLooper()){ ...
在Handler里,覆盖handleMessage()。Android系统会在Handler管理的线程收到新消息时,调用该方法。一个指定线程的所有Handler对象都会收到相同的消息。
/* *handleMessage()definestheoperationstoperformwhen *theHandlerreceivesanewMessagetoprocess. */ @Override publicvoidhandleMessage(MessageinputMessage){ //GetstheimagetaskfromtheincomingMessageobject. PhotoTaskphotoTask=(PhotoTask)inputMessage.obj; ... } ... } }