Looper和Handler

来源:互联网 发布:网络编程学校 编辑:程序博客网 时间:2024/05/17 17:17
一般情况下,我们启动一个线程,是让它完成一件任务,完成该任务后,线程就退出了。还有一种情况,我们希望该线程一直在运行,我们会时不时的向该线程发送一些消息,线程接收到该消息后,执行相应的操作,执行完成后,线程不退出,等待下一个消息,这很像所谓的“事件触发”。在Android上,使用Looper和Handler很容易实现该功能。
故名思意,Looper就是一个消息循环,而Handler就是一个消息处理器,在非UI线程中,线程默认是不存在消息循环的,因此在创建Handler的时候会抛出异常,在创建Handler对象之前,必须调用Looper.prepare(),然后创建Handler对象,最后启动消息循环:Looper.loop();


public class LoopThread extends Thread {      public interface HandlerCreater {              Handler createHandler();      }      private Handler mHandler = null;      private HandlerCreater mHandlerCreater;      LoopThread(HandlerCreater hc) {            mHandlerCreater = hc;      }      @Overwrite      public void run() {            Looper.prepare();            mHandler = mHandlerCreater.createHandler();            Looper.loop();            mHandler = null;      }      public void sendMessage(Message msg) {            if (null != mHandler) {                   mHandler.sendMessage(msg);            }      }}
这样,在主线程中只要实现一个HandleCreater,创建出自己合适的Handler,然后就可以启动线程,并向其发消息了。
跳出消息循环使用:Looper.myLooper().quit();

原创粉丝点击